天天看點

杭電OJ1013(Java版)

Oj1013 package calculator;

import java.math.BigInteger;  

import java.util.Scanner;  

public class Main{  

    public static void main(String[] args) {  

        Scanner scanner = new Scanner(System.in);  

       BigInteger b;  

       while (scanner.hasNext()) {  

            b = scanner.nextBigInteger();  

            if (b.intValue()==0) {  

                break;  

            } else if (b.mod(new BigInteger(String.valueOf(9))).intValue()==0){  

                System.out.println(9);  

            } else {  

                System.out.println(b.mod(new BigInteger(String.valueOf(9))));  

            }  

        }  

    }  

}  

//以上轉自網絡 ; 算法的原因如下: 比如34,我們是減去30加上3,其實就相當于減去3*9,

87這種,減去8*9是15,然後是再減去9,得到6

是以我們看到都是減去若幹個9,然後直到他是個位數為止,是以是mod9.如果mod9是0的話,輸出9.

有可能一些複雜的題目會利用到這個結論。

1.第一次寫想得很簡單,及用取餘的方法将每個數字的個位數相加,但是輸入值超過兩位數結果就出現錯誤。 原因:沒有考慮兩位數之後的情況

2.第二次改完之後又發現第一次輸入的值都能得到正确結果,但是往後輸入的值沒有辦法改變。 原因:在循環中輸入第二次值時沒有對某些變量初始化。

3.個人代碼沒有問題,但是卻忽略最重要的問題:輸入的值可以很大很大,但是Int的值有限制。 最終在網絡上尋找的代碼

新學習知識點:BigInteger