题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1013
题目大意:求数字根。
给一个数,不断进行各位数字相加的操作,直到结果为一位数,输出结果。
关键思想:九余数定理的应用(一个数各位之和与该数模9同余),很巧妙。证明请看http://blog.csdn.net/ray0354315/article/details/53991199
代码如下:
//九余数定理(为了建立最初各位和与数字根的联系) #include <iostream> using namespace std; int main(){ int sum; char temp; //不用数组的循环控制 while(1){ sum=0; while(temp=getchar()){ if(temp=='\n'){ cout<<(sum%9==0?9:sum%9)<<endl;//考虑最后结果若为9,模9就成0了,但此时数字根实际上为9 break; } else sum+=temp-'0'; if(sum==0)return 0;//0+9则结束。 } } return 0; }