求数的和 必须是个位数
Sample Input
24
39
0
Sample Output
6
3
这题很容易出错(可能超限,必须用数组)
真是醉了,竟然交了这么多次
这是错误的代码
#include <stdio.h>
#include <string.h>
int main()
{
char s[10000],t;
int sum=0,i,h;
while(1)
{
sum=0;
scanf("%s",s);
if(s[0]=='0')
break;
for(i=0;s[i];i++)
sum+=s[i]-48;
while(1)
{
if(sum<10)
break;
// 、、
memset(s,0,sizeof(s));
int j=0;
int n=0;
while(1)
{
s[j]=sum%10;
sum/=10;
if(sum==0)
break;
j++;
}
sum=0;
for(i=0;s[i];i++)
sum+=s[i];
}
printf("%d\n",sum);
}
return 0;
}
错误当输入5555时应该输出2而程序输出0,原因就是sum=20,存到s[0]=0,直接就跳出了,结果总为0
在、、处加if
(sum%10==0)
{sum=sum/10;
break
;}
这样也不对万一整除100,1000……呢,所以比较麻烦,直接换思路吧
这段是正确的代码
#include <stdio.h>
#include <string.h>
int main()
{
char s[10000];
int sum=0,i,n=0;
while(1)
{
n=0;
sum=0;
scanf("%s",s);
if(s[0]=='0')
break;
for(i=0;s[i];i++)
sum+=s[i]-48;
if(sum<10)
{
printf("%d\n",sum);
continue;
}
while(1)
{
n+=sum%10;
sum/=10;
if(sum==0)
{
if(n>=10)
{
sum=n;n=0;
continue;
}
else
{
printf("%d\n",n);
break;
}
}
}
}
return 0;
}