c语言编程求纠错~~~~

题目描述
数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。
输入要求
输入包括一些正整数(小于101000),每个一行。输入的最后一行是0,表示输入的结束,这一行不用处理。
输出要求
对每个正整数,输出它的数根。每个结果占据一行。
假如输入
24
39
0
应当输出
6
3
我的代码:
#include<stdio.h>
int sg(int n)
{
int d=0;
while(n)
{
d=d+n%10;
n=n/10;
}
return d;
}
int main()
{
int n,a;
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
a=sg(n);
if(a>=10)
a=sg(a);
printf("%d\n",a);
}
return 0;
}
oj上错误原因:
测试文件:/test.out 结果:答案错误 =======原因====== 当参考答案输出: 6 -------时--------- 你的程序输出: -1 =================测试文件:/sample.out 结果:答案正确

while(scanf("%d",&n)!=EOF) { if(n==0)break; a=sg(n); if(a>=10) a=sg(a); printf("%d\n",a); }
这个循环出错了,如果按你这个代码来执行的话,每次读入一个n的值,循环里都是只计算一次a的值,a的值要么是sg(n),要么是sg(a),然后继续读入新的n的值。
要想满足“如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。”这个要求的话,在循环里还得加上一个循环,反复计算a的值,直到其为一位数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-23
你的程序肯定不对这是定下的,因为要是第二次a还大于10,那么就不对了
所以
a=sg(n);
if(a>=10)
a=sg(a);
这里是要用循环来做的
do
n=sg(n)
while(n<10);
因为至少要计算一次,所以用do--while循环
这个判断while可能有错,你试验一下吧,要是错了,变成n>=10即可
第2个回答  2013-12-23
可能和输入的整数太大有关。你的数据都是int型,PC机上通常是16bit。数据范围:-32768 ~ + 32767。对于大于+32767的数值,就变成了负值。而你的程序要求的范围是:小于101000。因此超出了int的范围。

把int改成long应该就OK了。scanf()和printf()等也相应改变:%d ==> %ld。
第3个回答  2013-12-23
这么简单的问题还问,gdb,自己调试下不就知道哪错了吗?
第4个回答  2013-12-23
子程序里头,while(n)改为if(n/10!=0)试试
第5个回答  2019-02-25
首先,你缺了一个大括号,其次,for(a=2;a<=d;a++);这句多了一个分号,导致for循环其实就是一个空语句,然后你再用break语句就会出错,因为break语句不在for循环里。最后,printf("m不是一个素数\n");

printf("m是一个素数\n");这两句打印出来的是“
m不是一个素数”或“
m是一个素数”,而不是你输进去的m值。

c语言编程求纠错~~~
while(scanf("%d",&n)!=EOF){if(n==0)break;a=sg(n);if(a>=10)a=sg(a);printf("%d\\n",a);} 这个循环出错了,如果按你这个代码来执行的话,每次读入一个n的值,循环里都是只计算一次a的值,a的值要么是sg(n),要么是sg(a),然后继续读入新的n的值。要想满足“如果结果是两位...

用c语言求完全数,求纠错
printf("%d是完全数字!\\n",&sum); 改成printf("%d是完全数字!\\n",sum);输出不需要取地址符

求c语言代码纠错!!!
int binsearch(int list[],int searchnum,int left,int right);int main(int argc, char* argv[]) {int i,n,m;int list[MAX_SIZE];printf("Enter the number of number to generate:

求c语言代码纠错
int main(){ double x1,x2,a,b,c;printf("已知方程ax^2+bx+c=0,请输入a,b,c\\n");scanf("%lf%lf%lf",&a,&b,&c);printf("方程为ax^2+bx+c=0\\n"); \/\/有改动 if (b*b-4.0*a*c>=0){ x1=(-b+sqrt(b*b-4.0*a*c))\/(2.0*a); \/\/有改动 x2=(-b-...

C语言4个数值求平均值,求纠错
错误如下:主函数入口没有加int(int main())修改结果:include <stdio.h>int main() { int a, b, c, d; float e; scanf("%d %d %d %d", &a, &b, &c, &d); e = (a + b + c + d) \/ 4; printf("%f\\n", e);} ...

C语言 求纠错!!! 计算数值较大的a+b结果,
if x<y {a=x;b=y;}else {a=y;b=x;} z=0;while(a>=z){ C[z]+=A[x]+B[y]-96;C[z+1]=int(C[z]\/10);\/\/高一位数值取初值(进位设为初值,没有进位则为0初值)C[z]=C[z] mod 10;\/\/ 当前位数值;z++; x--;y--;} if C[b+1]<>0 b++; \/\/两数加...

C语言代码纠错。我这个运行结果和手算的不一样,请大神帮忙看看_百度...
scanf("%f%f%f",&Ui1,&Ui2,&Ui3,&Uo1,&Uo2,&Uo3);P=Lc*(Ui1+Ui2+Ui3-Uo1-Uo2-Uo3)\/(N*L);if(P<Pmin)printf("P=%f,该路段此时畅通",P);else if(P>Pmax)printf("P=%f,该路段此时堵塞",P);elseprintf("P=%f,该路段此时拥挤",P);}scanf那里 d要改成%f ...

C语言简单代码求纠错
include <stdio.h>#include <math.h> \/\/因为程序中用到了sqrt这个数学函数,所以需要包含进math.hmain(){ float a, b, c, x1, x2, m, p, q, delta; printf("Please enter the coefficient for the quadratic function:"); printf("a="); scanf("%f", &a); printf(...

用c语言编了个程序无法运行,求纠错.
把scanf("%d\\n",&n);改成scanf("%d",&n);。

c语言代码求纠错
1、你定义的max函数中定义的int型变量max的作用于只是该函数本身,所以在主程序中max(c,d)这一句的函数调用时没有任何意义的。2、printf("%d", max)这一句中的max是指什么呢?指的是max函数,还是你在max函数中定义的int型max变量,但是这两种不管是哪一种都是错误的。函数名和变量名不要重复。...

相似回答