问题链接:HDU1013 Digital Roots。入门练习题,用C语言编写程序。
数根是指整数的各个位的数字之和。如果其和为1位整数,则为结果;如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止。
这个问题的大陷阱是,没有指出整数是多少位的。即使使用unsignde long long类型,也可能会溢出的。所以,需要先用字符串来处理。
之前的版本(参见:HDU1013 Digital Roots)不是最佳解,所以重新写了这个程序。一边输入一边处理,才是最佳的选择,可以省去存储空间。
其他的所有解释都在程序中了。
AC的C语言程序如下:
/* HDU1013 Digital Roots */
#include <stdio.h>
int main(void)
{
char in;
int digiroot;
for(;;) {
// 读入一个字符
in = getchar();
// 判断结束条件
if(in == '0')
break;
// 计算数根
digiroot = 0;
while(in != '\n') {
// step1 计算各位数字之和
digiroot += in - '0';
// step2 每个10都变为1
digiroot = digiroot / 10 + digiroot % 10;
in = getchar();
}
// 输出结果
printf("%d\n", digiroot);
}
return 0;
}原文:http://blog.csdn.net/tigerisland45/article/details/51915714