问题:
正整数的数字根是通过对整数的数字求和而得出的。如果结果值是一个数字,那么该数字就是数字根。如果结果值包含两个或多个数字,则将这些数字相加并重复该过程。只要获得一位数字就可以继续进行。
例如,考虑正整数24。将2和4相加得出6的值。由于6是单个数字,所以6是24的数字根。现在考虑正整数39。将3和9相加得出12.由于12不是单个数字,因此必须重复该过程。将数字1和2乘以3,分别加一个数字和39的数字根。
输入:
输入文件将包含一个正整数列表,每行一个。输入的结尾将由零的整数表示。
输出
对于输入中的每个整数,在输出的单独一行上输出其数字根。
样例输入:
24
39
0
样例输出:
6
3
(注:此题涉及大数处理,所以先用字符串去操作)
#include <stdio.h>
#include <string.h>
int main()
{
long long n, sum, i;
char ch[10000000];
while (gets(ch) && ch[0] != '0')
{
sum = 0;
for (i = 0; i < strlen(ch); i++)
{
sum += ch[i]-'0';
}
n = sum; sum = 0;
while(1)
{
sum += n%10;
n /= 10;
if ((n == 0) && sum < 10)
break;
if (sum > 9 && (n == 0))
{
n = sum;
sum = 0;
}
}
printf("%lld\n", sum);
}
return 0;
}