题目描述:

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

输入

  输入两个字符串数字

输出

  输出相加后的结果,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. 如何巧用.htaccess设置网站的压缩与缓存

    <IfModule mod_expires.c> ExpiresActive On ExpiresDefault A86400 ExpiresByType image/gif A25920 ...

  2. PHP注释有意思的排列

    <?php // // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`---'\___ ...

  3. Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存

    Nginx地址重写 Nginx rewrite rewrite语法规则1).变量名可以使用 "=" 或 "!=" 运算符~ 区分大小写~* 不区分大小写^~ 禁 ...

  4. 我的Android最佳实践之—— Android启动画面的实现方法

    本文实例讲述了Android启动画面的实现方法.分享给大家供大家参考.具体分析如下: 在应用程序中经常用到启动画面,会启动一个后台线程为主程序的运行准备资源.Android要实现启动画面可以这样做: ...

  5. (C/C++) memset

    C语言: memset   extern void *memset(void *buffer,int c,int count);   #include <string.h>   功能:把b ...

  6. MyEclipse9中的不伤眼修改、FreeMarker插件、JQuery提示插件、全屏(FullScreen)插件的安装

    ============下载相关附件===================== http://files.cnblogs.com/fhtwins/eclipse-fullscreen_1.0.7.zi ...

  7. Codeforces Round #358 (Div. 2)B. Alyona and Mex

    B. Alyona and Mex time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. JAVA 综合布局应用

    //布局综合应用 import java.awt.*; import javax.swing.*; public class Jiemian4 extends JFrame{ JPanel mb1,m ...

  9. 关于 MySQL UTF8 编码下生僻字符插入失败/假死问题的分析

    原文:http://my.oschina.net/leejun2005/blog/343353 目录[-] 1.问题:mysql 遇到某些中文插入异常 2.原因:此 utf8 非彼 utf8 3.解决 ...

  10. java多线程的使用1

    方式1: public class LiftOff implements Runnable { ; ; private final int id = taskCount++; public LiftO ...