当前位置: 代码迷 >> C语言 >> 关于分解质因数的问题(已经基本上完成,但判断会过多,找高手修改)
  详细解决方案

关于分解质因数的问题(已经基本上完成,但判断会过多,找高手修改)

热度:265   发布时间:2005-07-09 18:34:00.0
关于分解质因数的问题(已经基本上完成,但判断会过多,找高手修改)

  本人初学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  

----------------解决方案--------------------------------------------------------

#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); } } 刚写了一个 觉得这样的东西没有必要用到递归


----------------解决方案--------------------------------------------------------

简简单单就可以了 #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; }


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
有点不如意之处:

如果能 cout 出这样的式子就更好了,如:24=2×2×2×3
这样可能会更好,对吗?
----------------解决方案--------------------------------------------------------
以下是引用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, 请赐教
----------------解决方案--------------------------------------------------------

  相关解决方案