1013 Digital Roots

Digital Roots

Digital Roots
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 77179 Accepted Submission(s): 24120

Problem Description

The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the process is repeated. This is continued as long as necessary to obtain a single digit.

For example, consider the positive integer 24. Adding the 2 and the 4 yields a value of 6. Since 6 is a single digit, 6 is the digital root of 24. Now consider the positive integer 39. Adding the 3 and the 9 yields 12. Since 12 is not a single digit, the process must be repeated. Adding the 1 and the 2 yeilds 3, a single digit and also the digital root of 39.

Input

The input file will contain a list of positive integers, one per line. The end of the input will be indicated by an integer value of zero.

Output

For each integer in the input, output its digital root on a separate line of the output.

Sample Input

24
39
0

Sample Output

6
3

代碼

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string n;
    while (cin >> n&&n != "0")
    {
        int sum = 0;
        for (int i = 0; i < n.length(); ++i)
            sum += n[i] - '0';
        cout << (sum - 1) % 9 + 1 << endl;
    }
    return 0;
}

瞅了幾眼,習慣性的要直接開始寫代碼,在限定範圍的時候,又感覺少了點什麼,返回來看題,原來是沒給範圍。那就拿string寫。之後在討論區看到了更好的方法——九餘數定理。
在度孃的幫助下(百度百科:棄九驗算法→什麼是棄九數)知道此題還有這麼一種巧妙的做法,漲知識了

有了相關的知識儲備後再來看代碼, (sum - 1) % 9 + 1爲什麼要先 -1 再 +1 呢,因爲直接 sum%9 會出現一個問題,那就是當 n=9 時,sum=9,得到的結果爲0,顯而易見答案是錯誤的。而先 -1 之後再 +1,對最終的結果是沒有影響的,又避免了9本身作爲除數時的尷尬


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章