NUC1015 计算数字的根

计算数字的根

时间限制: 1000ms 内存限制: 65536KB

问题描述

每个正整数通过每一位的求和都可以找到一个对应的根值.如果求和的结果是一位数字,那么这个数字就是这个正整数的根,如果这个值是两位或多位的话,重复上面的求和,直到求和结果为一位数字.

例如:考虑正整数24.把2和4相加得到6.6是一个数字,那么6就是24的根.现在考虑正整数39,3+9=12,12不是一位数.那么重复相加1+2=3,所以得到3为39的根.

现给定数据求该数的根.

输入描述

输入数据第一行有一个正整数N,表示下边有N个数据要计算.接下来分别是N行需要求根的正整数m. 其中( 1 ≤ m ≤ 1050 )

注:1050表示10的50次方

输出描述

输出这N个正整数的根,每个根占一行.

样例输入

3

24

39

987654321

样例输出

6

3

9


问题分析:

输入的数有50位,没法用整数类型存储,只能用字符串存储。

程序说明:

一般的做法是把各位数字加起来,加着加着数就变大了,需要迭代计算和的各位数字之和,直到剩下1位数。

利用数论的9余数定理来计算数根,则不需要这种迭代。

参见链接博文。


参考链接:HDU1013 POJ1519 Digital Roots(解法三)


AC的C++程序如下:

#include <iostream>

using namespace std;

int main()
{
    int n, digitroot;
    string s;

    cin >> n;
    while(n--) {
        cin >> s;

        digitroot = 0;
        int i =0;
        while(s[i]) {
            digitroot += s[i] - '0';
            digitroot = digitroot % 9;
            i++;
        }

        cout << ((digitroot == 0) ? 9 : digitroot) << endl;
    }

    return 0;
}




原文地址:https://www.cnblogs.com/tigerisland/p/7563884.html