题目描述

输入两个整数ab,输出这两个整数的和。ab都不超过100位。

算法描述

由于ab都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组AA[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b
计算c=a+b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。

输入

输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。

输出

输出一行,表示a+b的值。

样例输入

201001222010012212345678902010012220100122

样例输出

20100122203011233454668012
import java.util.*;
public class Main {
static Scanner in=new Scanner(System.in);
public static void main(String[] args) {
while(in.hasNext()){
String s1=in.next();
String s2=in.next();
int k;
if(s1.length()>s2.length()){
k=s1.length()-s2.length();
for (int i = 0; i<k; i++)
s2="0"+s2;
}
else if(s1.length()<s2.length()){
k=s2.length()-s1.length();
for (int i = 0; i <k; i++)
s1="0"+s1;
}
int cnt=Math.max(s1.length(),s2.length());
int[] a=new int[cnt];
int[] b=new int[cnt];
int[] c=new int[cnt];
for (int i = 0; i < cnt; i++) {
a[i]=s1.charAt(i)-'0';
b[i]=s2.charAt(i)-'0';
}
int r=0;
int i=cnt-1;
while(i>=0){
c[i]=(a[i]+b[i]+r)%10;
if(a[i]+b[i]+r>=10){
r=0;
r+=1;
}
else
r=0;
i--;
}
if(c[0]==0)
System.out.print("1");
for (int j =0; j<c.length; j++)
System.out.print(c[j]);
System.out.println();
}
}
}

反思:这么简单的题也是绝了,我竟然做了好久,服气了,可能是太久没有刷题了吧,算起来也有两个周了,我的错咯,哎,
本题我犯得最蠢的错误就是,开始我进行字符串对齐操作的时候,令i<s1.length()-s2.length(),可是我忽略了我后来一直在改变
字符串长度啊,s2="0"+s2,真是绝了,还有后来进位,注意要把进位置零,以及最后一位的处理,若满足进位,要优先输出1,
最后一遍,一定要注意变量的值随时变化,注意保护一些变量的值!!!!

更多相关文章

  1. 解析JSON数组使用GSON从URL
  2. 关于String、集合、数组的长度
  3. 二维数组空指针异常

随机推荐

  1. Android中 Rect类
  2. Android:SeekBar和RatingBar控件
  3. Android 安装环境搭建
  4. Android笔记--短信与拨号
  5. android常用UI控件的使用例子
  6. Android能用Linux打败Linux手机吗?
  7. Android中实现滑动的七种方式总结
  8. 大虾们的 android 浅谈
  9. android 解决输入法键盘遮盖布局问题
  10. android学习笔记(2)---第一个Android应用程