题解 | #高精度整数加法#
高精度整数加法
http://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
q57
将两个字符串中的数字保存在两个长度相同(长度设为最长字符串的长度l)的数组中,如果两个字符串的长度不相等,长度短的字符串对应数组的首几个位补0;然后对两个数组中下标相同的元素一一相加(考虑进位),相加后的结果放在另外一个数组(长度设为l + 1,如果两个字符串数组首位相加有进位,则此数值最高位为设为1,结果输出该数组所有元素;否则设为0,不输出该数组的首元素,从第二个元素开始输出)中,然后依次输出该数组中的元素即为结果
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
int index = 0;//进位
int l = 0;
if(str1.length() >= str2.length())
l = str1.length();
else
l = str2.length();
int[] arr1 = new int[l];
int[] arr2 = new int[l];
if(str1.length() >= str2.length()){
for(int i = 0;i < l;i++){
arr1[i] = str1.charAt(i) - '0';
}
for(int i = 0;i < l;i++){
if(0 <= i && i < l - str2.length()) arr2[i] = 0;
else arr2[i] = str2.charAt(i - (l - str2.length())) - '0';
}
}
else{
for(int i = 0;i < l;i++){
arr2[i] = str2.charAt(i) - '0';
}
for(int i = 0;i < l;i++){
if(0 <= i && i < l - str1.length()) arr1[i] = 0;
else arr1[i] = str1.charAt(i - (l - str1.length())) - '0';
}
}
int[] result = new int[l + 1];
for(int i = l - 1;i >= 0;i--){
int a = arr1[i] + arr2[i] + index;
if(a >= 10){
a = a - 10;
index = 1;
}
else index = 0;
result[i + 1] = a;
}
if(arr1[0] + arr2[0] >= 10){
result[0] = 1;
for(int i = 0;i <= l;i++)
System.out.print(result[i]);
}
else{
result[0] = 0;
for(int i = 1;i <= l;i++)
System.out.print(result[i]);
}
}
}