我似乎无法弄清楚这个方法用于添加两个字符串有什么问题。存储每个添加的数字并最终显示时它有一个缓冲区。但是,当添加两个大数字(大于10位数)时,它只会截断并且不存储字符串的其余部分。
public static void add(String a,String b){
StringBuilder buf = new StringBuilder();
if((a.length() - 1==0)&&(a.charAt(0)=='0')){
System.out.println(b);
return;
}
if((b.length() - 1==0)&&(b.charAt(0)=='0')){
System.out.println(a);
return;
}
else{
for ( int i1 = a.length() - 1, i2 = b.length() - 1, carry = 0;
(i1 >= 0 && i2 >= 0) || carry != 0;i1--, i2-- ) {
int digit1 = i1 < 0 ? 0 :
Integer.parseInt(Character.toString(a.charAt(i1)));
int digit2 = i2 < 0 ? 0 :
Integer.parseInt(Character.toString(b.charAt(i2)));
int digit = digit1 + digit2 + carry;
if (digit > 9) {
carry = 1;
digit -= 10;
} else {
carry = 0;
}
buf.append(digit);
}
}
System.out.println(buf.reverse().toString());
}
答案 0 :(得分:2)
由于需要在i1
和i2
达到负值时停止,因此条件应为
i1 >= 0 || i2 >= 0 || carry != 0
而不是
(i1 >= 0 && i2 >= 0) || carry != 0
答案 1 :(得分:1)
只需使用BigInteger,你的整个方法就是三行。