• 【AcWing】3449. 数字根 (数论思维、模拟)


    题目链接

    题目描述
    一个正整数的数字根是通过对该整数的各位数字求和得到的。
    如果得到的结果是一个一位数字,则该这个数字就是所求的正整数的数字根。如果得到的结果不止一位,则不断地对得到的中间结果进行各位数字求和,直到得到的最终结果为一位数字为止。最终的得到的一位数字就是该正整数的数字根。
    例如,对于整数 24,将 2 和 4 相加得到 6,而 6 是一位数字,所以 6 是 24 的数字根。
    再考虑整数 39,将 3 和 9 相加得到 12,由于 12 不是一位数字,所以要继续对其进行各位数字求和,将 1 和 2 相加得到 3,3 是一位数字,所以 3 是 39 的数字根。

    输入格式
    输入包含多组测试数据。
    每组数据占一行,包含一个正整数。
    读到0时表示输入结束。

    输出格式
    每组数据输出一行一个结果,表示给定整数的数字根。

    数据范围
    输入整数不超过 1000 位。
    每个输入最多包含 100 组数据。

    输入样例:

    24
    39
    0
    
    • 1
    • 2
    • 3

    输出样例:

    6
    3
    
    • 1
    • 2

    方法一
    数论思维:将输入的数字看成字符串,后转成每位数字相加,最后的结果其实就是将累加结果对9取余即可

    AC代码

    #include
    using namespace std;
    int main()
    {
        string n;
        while(cin>>n, n!="0")
        {
            int sum = 0;
            for(auto x : n)
            {
                sum += x - '0'; //遍历字符串,将字符转换成数字
            }
            sum = sum % 9;  
            if(sum == 0) cout<<'9'<<endl;
            else cout<<sum<<endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    方法二
    模拟:枚举输入的数,将每一位加起来之后得到sum,如果这个sum不是一位数,那么就将sum转成字符串,继续累加每一位,直到sum是一位数的时候结束循环

    AC代码

    #include 
    using namespace std;
    int main()
    {
        string n;
        while (cin>>n,n!="0") 
        {
            int sum=0; 
            while (sum==0||sum>9)  
            {   
                sum=0;   //初始化数字
                for (auto x : n)  
                {
                    sum += x - '0';//遍历字符串,将字符转换成数字
                }
                if (sum>9) n=to_string(sum); //如果当前的数字不是一位数,将sum转成字符串赋值给n
            }
            cout<<sum<<endl; 
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    多重共线性如何分析?
    iptables防火墙
    1.3 矩阵
    微信小程序汇总02
    面试了1个月连续失败4次,自动化测试真没想象的那么简单
    Timeline的使用心得
    ETCD数据库源码分析——gRPC 拦截器
    Java中的SPI原理浅谈
    OpenCV杂记(2):图像拼接(hconcat, vconcat)
    【SICP】引入与教学大纲
  • 原文地址:https://blog.csdn.net/m0_46669450/article/details/126282447