问题描述 通过总和整数的数字找到正整数的数字根。如果结果值是单个数字,那么该数字就是数字根。如果结果值包含两个或更多数字,则将这些数字相加并重复该过程。只要有必要获得一个数字,就会继续这样做。
例如,考虑正整数24.将2和4相加产生6的值。由于6是单个数字,因此6是24的数字根。现在考虑正整数39.将3和9相加12.由于12不是单个数字,因此必须重复该过程。添加1和2 yeilds 3,一个数字,也是39的数字根。
埃迪的一个简单的问题是:给你n,希望你找到n ^ n的数字Roots。 输入 输入文件将包含一个正整数列表n,每行一个。输入的结尾将用整数值0表示。注意:对于输入n(n <10000)中的每个整数。 输出 在输出的一个单独的行上输出n ^ n的数字根。 示例输入
2 4 0
示例输出
4 4
这道题与之前的【1013】都是求数根,但是这两道题的解法是不同的。1013的特点是输入的数位数特别多,每一位相加循环求数根;而1163则是要求输入n的n次幂再求数根。
在这里,我用的是上学期初等数论证明过的一个练习题的结论(网上叫九余数定理)
简单来讲,就是说一个数模9的余数不等于0,那么这个余数就是这个数的数根;等于0,数根就是9。(这个结论是很容易证明的)
下面来看代码:
//九余数定理
#include <stdio.h>
int main() {
int temp; //定义临时变量
int n,i;
while(scanf("%d",&n)!=EOF&&n!=0)
{
temp=n;
for (i=0; i<n-1; i++)
{
temp=(temp*n)%9;
} //计算n^n,取余
if(temp==0)
printf("9\n");
else
printf("%d\n",temp);
}
return 0;
}