2013-02-03 34 views
0

为了实践,我试图通过将它们放入数组并在数组中添加相应的元素来添加两个非常长的整数。但是,当试图添加结转时,我遇到了问题(即,结转是1,例如,当您执行199 + 199 = 398时,您增加到十个地方)。添加两个非常长的整数

当做167 + 189我得到正确的答案是356.然而,对于这个例子,虽然(199 + 199),我得到288而不是398.我的问题是,为什么我得到一个不正确的当我做199 + 199的时候回答,如果167 + 189的时候结转效果很好,

if (stringNumOneLength == stringNumTwoLength) 
    { int answer; 
     int carryOver = 0; 
     int answerArray[] = new int[stringNumOneLength + 1]; 
     for (int i = 1; i <= stringNumTwoLength; i = i + 1) 
     {    
      answer = Character.getNumericValue(stringNumOne.charAt(stringNumOneLength - i)) + Character.getNumericValue(stringNumTwo.charAt(stringNumTwoLength - i) + carryOver); 
      System.out.println(answer); 
      if (answer >= 10) 
      { 
       for (int j = 0; j <= 9; j = j + 1) 
       { 
        if (10 + j == answer) 
        { 
         carryOver = 1; 
         answer = j; 
         System.out.println("The carryover is " + carryOver + "."); 
        } 
       } 
      } 
      else 
      { 
       carryOver = 0; 
      } 

      answerArray[stringNumOneLength + 1 - i] = answer; 
     } 
     System.out.println(Arrays.toString(answerArray)); 
    } 

的输出是下面的:

[1,9,9]

[1,9,9]

的残留是1

[0,2,8,8]

回答

1

在这条线的括号:

answer = Character.getNumericValue(stringNumOne.charAt(stringNumOneLength - i)) + Character.getNumericValue(stringNumTwo.charAt(stringNumTwoLength - i) + carryOver); 

是错误的。请注意0​​如何在对Character.getNumericValue的调用中。

+0

这是很烦人花一个小时和一个半试图找出为什么所有的其他情况除了199 + 199的工作,只是为了发现它是因为括号。尽管如此,非常感谢!我永远不会忘记从现在开始检查语法。非常感谢你! – rsant023

2

要添加进到字符,而不是它的价值:

... + Character.getNumericValue(stringNumTwo.charAt(stringNumTwoLength - i) + carryOver); 

你要移到右边父+内。

注意你的循环是不必要的。这做同样的事情:

if (answer >= 10) 
{ 
    answer -= 10; 
    carryOver = 1; 
    System.out.println("The carryover is 1."); 
} 
else ... 

如果你有兴趣在惯用的解决方案:

public class Test { 

    public String add(String a, String b) { 
     StringBuilder r = new StringBuilder(); 
     int carry = 0; 
     for (int ia = a.length() - 1, ib = b.length() - 1; ia >= 0 || ib >= 0; ia--, ib--) { 
      int aDigit = ia < 0 ? 0 : Character.getNumericValue(a.charAt(ia)); 
      int bDigit = ib < 0 ? 0 : Character.getNumericValue(b.charAt(ib)); 
      int sum = carry + aDigit + bDigit; 
      if (sum >= 10) { 
       sum -= 10; 
       carry = 1; 
      } 
      else { 
       carry = 0; 
      } 
      r.append(Character.forDigit(sum, 10)); 
     } 
     if (carry > 0) { 
      r.append('1'); 
     } 
     return r.reverse().toString(); 
    } 

    public void run() { 
     System.out.println("789 + 89 = " + add("789", "89")); 
     System.out.println("12 + 128 = " + add("12", "128")); 
     System.out.println("999 + 999 = " + add("999", "999")); 
    } 

    public static void main(String[] args) { 
     new Test().run(); 
    } 
} 
+0

谢谢,答案 - = 10做了同样的事情,我的循环正在做,它更加优雅。 – rsant023