【HDU】1163 Eddy's digital Roots

问题描述
通过总和整数的数字找到正整数的数字根。如果结果值是单个数字,那么该数字就是数字根。如果结果值包含两个或更多数字,则将这些数字相加并重复该过程。只要有必要获得一个数字,就会继续这样做。
例如,考虑正整数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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值