题目描述:

  请设计一个算法完成两个超长正整数的加法。

输入

  输入两个字符串数字

输出

  输出相加后的结果,string型

样例输入

  99999999999999999999999999999999999999999999999999 1

样例输出

  100000000000000000000000000000000000000000000000000

思路:

  在Java中,这样的大数运算可以直接用BigInteger类中的方法来进行运算和处理,那样本题没有任何意义了

  因此在本方法中,不直接采用该类中的方法进行运算,直接在字符串中进行逐位运算的方法来得到结果

 import java.util.Scanner;

 /**
* 请设计一个算法完成两个超长正整数的加法。
输入
  输入两个字符串数字
输出
  输出相加后的结果,string型
样例输入
  99999999999999999999999999999999999999999999999999 1
样例输出
  100000000000000000000000000000000000000000000000000
*
*/
public class BigDataAdd { public static void main(String[] args) {
//输入,读取两个字符串
Scanner cin = new Scanner(System.in) ;
String num1 = cin.next() ;
String num2 = cin.next() ;
cin.close() ; System.out.println(addBigdata(num1,num2)); } /**
* 该方法完成运算,返回字符串结果
* @param num1
* @param num2
* @return
*/
private static String addBigdata(String num1, String num2) {
int last = 0 ;
//用StringBuilder来添加运算结果
StringBuilder sb = new StringBuilder() ;
int len1 = num1.length() ;
int len2 = num2.length() ;
int now1 ; //保存字符串num1中当前运算的 位 的值
int now2 ;
int res ; //保存当前位的运算结果
for(int i = len1-1, j = len2-1 ; i >= 0 || j >= 0; i--,j--){
//获取当前num1的当前运算位的值,
//当最高位超过本串的长度时,设为0
if( i >= 0){
now1 = num1.charAt(i) - '0' ;
}else{
now1 = 0 ;
}
//获取当前num2的当前运算位的值,当最高位超过本串的长度时,设为0
if( j >= 0){
now2 = num2.charAt(j) - '0' ;
}else{
now2 = 0 ;
}
//计算结果,两个当前位以及进位值相加
res = now1 + now2 + last ;
//当当前位的计算结果大于等于10时需要进位,
//置进位标志位1,保存的计算结果则取个位的值
if(res >= 10){
last = 1 ;
res = res - 10 ;
}
sb.append(res) ; res = 0 ;
}
//最高位运算结束后,若有进位,则应保存结果
if(last != 0){
sb.append(last) ;
}
//上面的结果是从个位一次向高位保存的,
// 所以正在的结果需要反转一下
return sb.reverse().toString() ;
}
}

Code

华为OJ平台——超长正整数相加的更多相关文章

  1. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

  2. 华为OJ平台——输出最小的k个数

    输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint ...

  3. 华为OJ平台——矩阵乘法

    题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵 ...

  4. 华为OJ平台——完美数

    import java.util.Scanner; /** * * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. * 它所有的真因子(即除了自身以外的约数)的和(即 ...

  5. 华为OJ平台——将真分数分解为埃及分数

    题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...

  6. 华为OJ平台——百钱买百鸡问题

    题目描述: 元前五世纪,我国古代数学家张丘建在<算经>一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一. 百钱买百鸡,问鸡翁.鸡母.鸡雏各几何? 思路: 这道题很简单,假 ...

  7. 华为OJ平台——密码强度等级

    题目描述: 密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分. 一.密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 二.字母: 0  ...

  8. 华为OJ平台——求最大连续bit数

    题目描述: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 输入: 一个byte型的数字    输出: 对应的二进制数字中1的最大连续数 思路: ...

  9. 华为OJ平台——统计字符串中的大写字母

    题目描述: 统计字符串中的大写字母的个数 输入: 一行字符串 输出: 字符串中大写字母的个数(当空串时输出0) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可 ...

随机推荐

  1. Spark工程开发常用函数与方法(Scala语言)

    import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.sql.{SaveMode, DataFrame}im ...

  2. ADF_Database Develop系列3_通过UML进行数据库开发之将Database Diagram转为Class Diagram

    2013-05-01 Created By BaoXinjian

  3. hdu 5288 OO’s Sequence 枚举+二分

    Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number o ...

  4. Mobirise

    网站建设器Mobirise v1.9.2 免费版 - 绿色软件联盟 2015年9月5日 - 网站建设器Mobirise是一个用户友好的程序,使您可以构建桌面和移动网站,准备在Javas cript中. ...

  5. 外中断之swi软件中断:

    在stm32的标准库的外中断库文件中有void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);原来一直不知道有什么用,现总结一下: 作用:软件模拟产生中断能 ...

  6. 在PHPstorm编辑器中配置git环境

    在phpstorm编辑器中配置git环境,使得编程人员从git仓库中提交代码,克隆代码,,,更佳便利快捷,有利于提高项目的质量和效率 工具/原料   phpstorm编辑器,git客户端 win7或w ...

  7. git添加标签(转载)

    From:http://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE 打标签 同大多数 VCS 一 ...

  8. Log4Net在Windows服务中不能记录日志 z

    解决方案: 在Windows安装服务的“serviceProcessInstaller1”中修改Account属性为LocalSystem.见下图 后来查了一下这个Account属性 说白了还是权限的 ...

  9. [SQL]SQL优化34条

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! () 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到 ...

  10. [SQL]SQL Server数据表的基础知识与增查删改

    SQL Server数据表的基础知识与增查删改 由张晨辉(学生) 于19天 前发表 | 阅读94次 一.常用数据类型 .整型:bigint.int.smallint.tinyint .小数:decim ...