HDU 1163 Eddy's digital Roots(模)

HDU 1163

题意简单,求n^n的(1)各数位的和,一旦和大于9,和再重复步骤(1),直到和小于10.

//方法一:就是求模9的余数嘛! (228) leizh007 2012-03-26 21:03:19 (确实可行)

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,ans;
    while(scanf("%d",&n),n)
    {
        ans=1;
        for(i=0;i<n;i++)
        {
            ans=(ans%9)*n;
            if(ans==0)
                ans=9;
        }
        ans=ans%9;
        if(ans==0)
            ans=9;
        printf("%d\n",ans);
    }
    return 0;
}
View Code

 

  //方法二:乘一次,加一次(这个也可行,这是我自己想的哦~哈哈)

#include<stdio.h>
#include<string.h>
int f(int num)
{
    int ans=0;
    while(num)
    {
        ans=num%10+ans;
        num=num/10;
    }
    if(ans>9)
        return f(ans);
    return ans;
}
int main()
{
    int n,i,ans,num;
    while(scanf("%d",&n),n)
    {
        ans=f(n);
        for(i=1;i<n;i++)
        {
            num=ans*n;
            ans=f(num);
        }
        printf("%d\n",ans);
    }
    return 0;
}
View Code

 

 

posted @ 2013-08-01 22:14  laiba2004  Views(130)  Comments(0Edit  收藏  举报