题目链接
/*
要说明的是,这道题不能用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
",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-1)%9+1);
}
return 0;
}