作者:手机用户250285627 | 来源:互联网 | 2023-10-10 21:45
Sample Input
24
39
0
Sample Output
6
3
这题很容易出错(可能超限,必须用数组)
真是醉了,竟然交了这么多次
这是错误的代码
#include
#include
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
#include
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;
}