题目描述
给定两个正整数(不含前导 0),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
样例
输入样例:
12
23
输出样例:
35
加法模拟
为了防止溢出,使用字符串
时间复杂度 O(m)
m:输入字符串的最大长度
java 代码
import java.util.*;
//模拟加法--字符串
public class Main{
static List<Integer> list=new ArrayList<>();
public static String sum(String a,String b){
list.clear(); // 清空列表
int i=a.length()-1;
int j=b.length()-1;
int tmp=0; //进位
while(i>=0&&j>=0){
int ai=a.charAt(i)-'0';
int bj=b.charAt(j)-'0';
int add=ai+bj+tmp;
list.add(add%10);
tmp=add/10;
i--;
j--;
}
//b长
while(j>=0){
int bj=b.charAt(j)-'0';
int add=bj+tmp;
list.add(add%10);
tmp=add/10;
j--;
}
//a长
while(i>=0){
int ai=a.charAt(i)-'0';
int add=ai+tmp;
list.add(add%10);
tmp=add/10;
i--;
}
if(tmp!=0){ //最高位可能有进位
list.add(tmp);
}
StringBuilder sb=new StringBuilder();
for(int k=list.size()-1;k>=0;k--){
sb.append(list.get(k));
}
return new String(sb.toString());
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String a=sc.nextLine();
String b=sc.nextLine();
String ret=sum(a,b);
System.out.println(ret);
}
}