2013-02-03 66 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