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 结果:答案正确
展开
 我来答
天马lms
2013-12-23 · 超过19用户采纳过TA的回答
知道答主
回答量:50
采纳率:100%
帮助的人:16.5万
展开全部
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的值,直到其为一位数。
cpucash
2013-12-23 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:958万
展开全部
你的程序肯定不对这是定下的,因为要是第二次a还大于10,那么就不对了
所以
a=sg(n);
if(a>=10)
a=sg(a);
这里是要用循环来做的
do
n=sg(n)
while(n<10);
因为至少要计算一次,所以用do--while循环
这个判断while可能有错,你试验一下吧,要是错了,变成n>=10即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清河大侠
2013-12-23 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.6万
采纳率:77%
帮助的人:1189万
展开全部
可能和输入的整数太大有关。你的数据都是int型,PC机上通常是16bit。数据范围:-32768 ~ + 32767。对于大于+32767的数值,就变成了负值。而你的程序要求的范围是:小于101000。因此超出了int的范围。

把int改成long应该就OK了。scanf()和printf()等也相应改变:%d ==> %ld。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a259b98
2013-12-23
知道答主
回答量:35
采纳率:0%
帮助的人:21.7万
展开全部
这么简单的问题还问,gdb,自己调试下不就知道哪错了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x_00010009
2013-12-23
知道答主
回答量:11
采纳率:0%
帮助的人:3.8万
展开全部
子程序里头,while(n)改为if(n/10!=0)试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慕菀雪宸
游戏玩家

2019-02-25 · 非著名电竞玩家
知道大有可为答主
回答量:1.1万
采纳率:33%
帮助的人:817万
展开全部
首先,你缺了一个大括号,其次,for(a=2;a<=d;a++);这句多了一个分号,导致for循环其实就是一个空语句,然后你再用break语句就会出错,因为break语句不在for循环里。最后,printf("m不是一个素数\n");

printf("m是一个素数\n");这两句打印出来的是“
m不是一个素数”或“
m是一个素数”,而不是你输进去的m值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式