zoukankan      html  css  js  c++  java
  • 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;
    }




  • 相关阅读:
    freemarker报错之五
    freemarker处理空值
    freemarker报错之四
    freemarker之include指令
    freemarker之list
    freemarker报错之三
    freemarker中的if...elseif...else语句
    freemarker获取封装类中对象的属性
    单块读和多块读操作汇总
    freemarker报错之二
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563884.html
Copyright © 2011-2022 走看看