第一版代码如下:
include<stdio.h>
int sum(int n){
int size,buf[100];
size=0;
while(n!=0){
buf[size]=n%10;
n/=10;
size++;
}
int m=0;
for(int i=0;i<size;i++){
m+=buf[i];
}
if(m>=10) m=sum(m);
else return m;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n==0) break;
int root=sum(n);
printf("%d\n",root);
}
return 0;
}
当输入的数不超过九位时,正确。一旦超过会出现负数,明显出错。应该是int类型无法存储这么大的数。由于题目没有说明输入的范围,所以改成long也不一定管用。于是将输入改为用数组存储。
#include<stdio.h>
#include<string.h>
void root(char a[]){
int ans,len,i;
len=strlen(a);
ans=0;
for(i=0;i<len;i++){
ans+=a[i]-'0';
}
i=0;
while(ans!=0){
a[i]=ans%10+'0';
ans/=10;
i++;
}
a[i]='\0';
}
int main(){
char a[10000];
while(scanf("%s",a)!=EOF && a[0]!='0'){
while(strlen(a)>1){
root(a);
}
printf("%s\n",a);
}
return 0;
}