表面看该程序就是一个数的各个位的分离相加,但却忽视这是一个很大的数,所以之前提交总是Wa
wa码
#include<stdio.h>
int main()
{
int a[100],n,i,s;
while(scanf("%d",&n)!=EOF)
{ if(n==0)
break;
s=0;
for(i=0;n!=0;)
{
a[i]=n%10;
n=n/10;
s=s+a[i];
i++;
if(n==0&&s/10==0)
printf("%d\n",s);
else if(n==0&&s/10!=0)
{
n=s;
i=0;
s=0;
}
}
}
return 0;
然后就换了一种方法
#include<cstdio>
#include<cstring>
int main()
{ char a[1001];
int n,i,s,sum;
while(scanf("%s",&a))
{ if(strcmp(a,"0")==0)
break;
s=0;
for(i=0;a[i]!='\0';i++)
{
s=s+a[i]-'0';
}
do
{
sum=0;
while(s)
{
sum+=s%10; //两个while循环运用极为比较巧妙
s=s/10;
}
s=sum;
}while(sum>9);
printf("%d\n",sum);
}
return 0;
}
后来有百度了一下,发现应该定义一个字符串数组来存储数据
#include<cstdio>
#include<string.h>
int main()
{ char a[1001];
int n,i,s;
while(scanf("%s",&a))
{ if(strcmp(a,"0")==0)
//if(a=="0") //处理字符串必须用strcmp函数
break;
s=0;
for(i=0;a[i]!='\0';i++)
{
s=s+a[i]-'0';
}
if(s>9)
s=s%9;
if(s==0)//排除正好被9整除的数,否则就输出0了!
printf("9\n");
else
printf("%d\n",s) ;
}
return 0;
}
注意这个除9取余的算法非常独到!!
省去了好多循环!