使用字符串添加两个大长度的数字

时间:2014-08-22 16:06:07

标签: java string

我似乎无法弄清楚这个方法用于添加两个字符串有什么问题。存储每个添加的数字并最终显示时它有一个缓冲区。但是,当添加两个大数字(大于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());
}

2 个答案:

答案 0 :(得分:2)

由于需要在i1i2达到负值时停止,因此条件应为

i1 >= 0 || i2 >= 0 || carry != 0

而不是

(i1 >= 0 && i2 >= 0) || carry != 0

Demo on ideone.

答案 1 :(得分:1)

只需使用BigInteger,你的整个方法就是三行。