hdu1013Digital Roots

来源:互联网 发布:清朗网络海报 编辑:程序博客网 时间:2024/06/14 06:38
题目链接

/*

要说明的是,这道题不能用int 类型,要用字符类型。

*/

#include<stdio.h>#include<string.h>char num[110];int main(){   while(~scanf("%s",num) && num[0]!='0')   {       int len = strlen(num);       int sum = 0;       int i;       for( i= 0; i < len; i++)       {           sum += num[i] - '0';       }        while(sum > 9)       {           int a = 0;           while(sum > 0)           {               a += sum % 10;               sum /= 10;           }               sum = a;       }        printf("%d\n",sum);   }   return 0;}



 才发现还有另一种做法:

n=0 1 2 3 4 5 6 7 8 9 10 11 12 13 ......... 100 101 102 103 ....
roots=0 1 2 3 4 5 6 7 8 9 1 2 3 4 .......1 2 3 4....
原来是以1.....9为循环节的。想想也是,每次增加1,那么层层迭代下来,最终当ans<10的时候也是每次增加了1。如此,可以归纳出
roots=(n-1)%9+1

#include<stdio.h>#include<string.h>int main(){    int i,n,tmp;    char a[1003];    while (scanf("%s",&a)&&a[0]!='0')    {        n=0;        for (i=0;i<strlen(a); i++)        {            n+=a[i]-48;        }        printf("%d\n",(n-1)%9+1);    }    return 0;}

 

 

 

 

 

0 0