题目

思路
首先由输入的数据就可以看出,我们应该以字符串的形式读入,然后根据题意,只有在个位数的时候就是字符串长度len==1时,分好类,类别就是该字符串,如果不是个位数,就计算数码和sum,先初始化为0,由于这里是字母的形式,索引我们将字母-'0'就可以得到原来的数字,然后依次把每个数字加进去。如果数码和>=10,那么就还要计算该数码和的数码和,只不过现在这个数码和已经是数字了,我们就不能用字母的方式了,而是用数字的方式,每次将末尾取出来(%10),然后加到new_sum,去掉末尾(/10),如此重复,直到原来的sum变为0就结束。然后输出结果就是new_sum,只不过我们new_sum定义在while内部,循环一结束就会释放掉,就是我们还是将new_sum的结果赋值给sum,最后输出sum就好了。
代码
cpp
#include<stdio.h>
#include<string.h>
char s[505];
int main(){
while(~scanf("%s",s)){
if(strcmp(s,"0")==0) return 0;
int len=strlen(s);
if(len==1){
printf("%s\n",s);
continue;
}
int sum=0;
for(int i=0;i<len;i++){
sum+=s[i]-'0';
}
while(sum>=10){
int new_sum=0;
int temp=sum;
while(temp){
new_sum+=temp%10;
temp/=10;
}
sum=new_sum;
}
printf("%d\n",sum);
}
return 0;
}