标题:关于分解质因数的问题(已经基本上完成,但判断会过多,找高手修改)
只看楼主
luojinglin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-7-9
 问题点数:0 回复次数:5 
关于分解质因数的问题(已经基本上完成,但判断会过多,找高手修改)

  本人初学C语言,自己编了一个分解质因数的问题。代码已经达到了目标,但是由于编程上的缺陷,造成会多出几个错误的答案出来。原本准备用GOTO从判断中出来,但实在有其他原因,所以不能用GOTO。望高手指点一下,把判断或其他地方修改一下,使他多出来的错误答案消失,在这里谢谢了,如果哪里编得很幼稚,实在是刚刚开始学,请原谅!谢谢!!!(代码如下)

#include <stdio.h> #include <math.h> void fenjie(int x) { ````int y=0,a=0,b=0; ````if(x>2) ````{ ``````y=x; ``````for(a=2;a<=floor(sqrt(x));a++) ``````{ ````````if(x%a==0) ````````{ ``````````printf("%d ",a); ``````````b=b+1; ``````````y=y/a; ``````````fenjie(y); ````````} ``````} ``````if(b==0) ``````{ ````````printf("%d\n",x); ``````} ````} ````else ````{ ``````printf("2\n"); ````} } main() { ``int m; ``while(m!=0) ``{ ````scanf("%d",&m); ````fenjie(m); ``} }

搜索更多相关主题的帖子: 质因数 int 判断 GOTO 
2005-07-09 18:34
poppylx
Rank: 1
等 级:新手上路
帖 子:367
专家分:0
注 册:2004-9-27
得分:0 

#include <stdio.h> #include <math.h>

int sushu(int x) { int n;

for(n=2;n<=floor(sqrt(x));n++) if( x % n != 0 ) return 0; return 1; }

void fenjie(int x) { int n; for ( n = 2 ; n <= x ; n ++ ) { if ( x % n == 0 ) { printf ("%d ",n ); x = x / n; if ( sushu ( x) ) break ; n=2; } } }

main() { int m; while(m!=0) { scanf("%d",&m); fenjie(m); } } 刚写了一个 觉得这样的东西没有必要用到递归


动于心而静如水
2005-07-13 18:00
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
得分:0 

简简单单就可以了 #include <stdio.h>

int main() { int m,t; while(scanf("%d",&m)==1&&m) { for(t=2; m>1; t++) { if (m%t == 0) { do m/=t;while(m%t == 0); printf("%d ", t); } } printf("\n"); } return 0; }


Have you visit acm.tongji. lately?
2005-07-13 20:40
poppylx
Rank: 1
等 级:新手上路
帖 子:367
专家分:0
注 册:2004-9-27
得分:0 

动于心而静如水
2005-07-13 21:23
一元
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-7-14
得分:0 
有点不如意之处:

如果能 cout 出这样的式子就更好了,如:24=2×2×2×3
这样可能会更好,对吗?
2005-07-14 23:02
钢燃
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2005-5-19
得分:0 
以下是引用kaikai在2005-7-13 20:40:44的发言:

简简单单就可以了 #include <stdio.h>

int main() { int m,t; while(scanf("%d",&m)==1&&m) { for(t=2; m>1; t++) { if (m%t == 0) { do m/=t;while(m%t == 0); printf("%d ", t); } } printf("\n"); } return 0; }

看了楼主的帖子,又看了看老兄的帖子。觉得有一点欠缺。不知道你注意没有,举个例子: 24吧,楼主的结果会是2223;你的会是23。 声明一下,对你的稍作修改 for(~~~~~) { while(m%t==0) { m=/t; printf("%d," , t); } } ~~~~~~~~~~~~~~~~ 结果将会是2,2,2,3, 请赐教


寻找同济的朋友的网络连接
2005-07-16 13:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-22552-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017113 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved