题解 | #高精度整数加法#
高精度整数加法
http://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
描述
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。
输入描述:
输入两个字符串。保证字符串只含有'0'~'9'字符
输出描述:
输出求和后的结果
示例1
输入:
9876543210
1234567890
输出:
11111111100
解法: 类似一个小型的加法运算, 先固定长串,短串,一个个取出来,从末尾数字相加,取一个中间值,需要进位的话,中间值flag就加1
要注意考虑两个串相等的情况,已经两个串长度不相等另一个长串还是需要继续加完
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s1 = sc.next(); String s2 = sc.next(); String s3 = s1.length()>=s2.length()?s1:s2; String s4 = s2.length()<=s1.length()?s2:s1; int flag =0; StringBuffer sb = new StringBuffer(); int i=s3.length()-1; int j=s4.length()-1; for(;i>=0 && j>=0;i--,j--){ int a = Character.getNumericValue(s3.charAt(i)); int b = Character.getNumericValue(s4.charAt(j)); int sum= a+b+flag; if(sum<10){ sb.insert(0,String.valueOf(sum));//插在头 flag=0; }else{ sb.insert(0,String.valueOf(sum%10));//插在头 flag=1; } } //如果串长度相等,且最后相加大于10,那flag=1,需要再最前面进一位 if (flag == 1 && i < 0) { sb.insert(0,String.valueOf(1)); } //如果串长度不相等,那长串还需要再相加,已经固定长串是s3 for(;i>=0;i--){ int a = Character.getNumericValue(s3.charAt(i)); int sum= a+flag; if(sum<10){ sb.insert(0,String.valueOf(sum));//插在头 flag=0; }else{ sb.insert(0,String.valueOf(sum%10));//插在头 flag=1; } } System.out.println(sb.toString()); } } }