题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
这道题的思路还是挺简单的,关键就要看你细心不细心了。
创建一个 int 类型的数组 res ,从后往前遍历两个字符串中的字符,将它们转换为 int 类型之后,再相加得到值 sum,插入 res 数组的顺序也是从后往前依次插入,插入的值要根据 sum 是否大于 0 做判断。
由于我们创建的数组的长度是两个字符串中较大的长度,因此在结束循环时还需要判断是否有进位。
最后将该数组拼接为字符串即可。
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String str1 = in.next(); String str2 = in.next(); int res[] = new int[Math.max(str1.length(),str2.length())]; int index = res.length-1; //插入新数组的索引 int number = 0; //记录进位 for(int i=str1.length()-1,j=str2.length()-1;i>=0||j>=0;j--,i--){ int num1 = 0,num2 = 0; if(i>=0) num1 = str1.charAt(i) - '0'; if(j>=0) num2 = str2.charAt(j) - '0'; int sum = num1 + num2 + number; res[index--] = sum>=10 ? sum-10 : sum; //如果有进位,那么减去10就是当前值 number = sum>=10 ? 1 : 0; //大于十则有进位 } StringBuffer sb = new StringBuffer(); if(number == 1) sb.append(1); //如果有进位,则先拼接一个 1 。 for(int n:res) sb.append(n); System.out.println(sb.toString()); } } }