zoukankan      html  css  js  c++  java
  • HDU1163 Eddy's digital Roots

    问题链接:HDU1013 Digital Roots入门练习题,用C语言编写程序。

    这个问题是对于输入的n,计算n^n的数根。

    先看一下以下式子:

    因为:(10*a+b)*(10*a+b)=100*a*a+10*2*a*b+b*b 

    所以右边式子的数根(中间结果,也是左边式子的数根)为:a*a+2*a*b+b*b=(a+b)*(a+b)

    故:对于两位数n,n*n的数根=n的树根×n的树根。

    同理可以推出,对于任意位数的n,也满足:n*n的数根=n的树根×n的树根。 

    程序中,实现一个计算整数数根的函数,利用这个函数来计算n^n的数根。

    这个问题还有一种解决办法是利用9余数定理来实现。

    AC的C语言程序如下:

    /* HDU1163 Eddy's digital Roots */
    
    #include <stdio.h>
    
    // 计算数根函数
    int digitalroots(int val)
    {
        int result, temp;
    
        while(val) {
            result = 0;
            temp = val;
    
            while(temp) {
                result += temp % 10;
                temp /= 10;
            }
    
            if(result < 10)
                break;
    
            val = result;
        }
    
        return result;
    }
    
    int main(void)
    {
        int n, ans, nr, i;
    
        while(scanf("%d", &n) != EOF) {
            if(n == 0)
                break;
    
            // 计算n的数根
            ans = nr = digitalroots(n);
    
            // 计算n^n的数根
            for(i=2; i<=n; i++) {
                ans = digitalroots(ans * nr);
            }
    
            // 输出结果
            printf("%d
    ", ans);
        }
    
        return 0;
    }


  • 相关阅读:
    做题总结
    关于SQLSERVER中用SQL语句查询的一些个人理解
    关于SQLSERVER联合查询一点看法
    C#中怎样实现序列化和反序列化
    java内部类的使用
    C#抽象类
    匿名类
    Foreach能够循环的本质
    C#索引器
    深入了解接口的使用
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564541.html
Copyright © 2011-2022 走看看