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;
}


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