HDU 1013 Digital Roots 模拟题

解题报告:

题目大意:给定一个正整数N,求这个数的“根”,这里的根指的是:若N是个位数,则它的根就是N,若N是两位或两位以上的数,则的它的根就等于N的各位的和,若它的各位的和任然是两位或两位以上,则再求这个和的各位的和,直到这个各位的和是一个个位数。就是N的根。

模拟题,但要注意的是这个N的范围很大,要用数组模拟。

 1 #include<cstdio>
 2 #include<cstring>
 3 int main() {
 4     int N,ans=0;
 5     char str[1000];
 6     while(scanf("%s",str)) {
 7         if(strlen(str)==1&&str[0]=='0')
 8         break;
 9         while(1) {
10             int len=strlen(str);
11             if(len==1) {
12                 printf("%s\n",str);
13                 break;
14             }
15             ans=0;
16             for(int i=0;i<len;++i)
17             ans+=str[i]-'0';
18             int z=0;
19             while(ans!=0) {
20                 str[z++]=(ans%10)+'0';
21                 ans/=10;
22             }
23             str[z]=NULL;
24         }
25     }
26     return 0;
27 }
28              
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3100384.html