C语言,分解质因数

C语言分解质因数,连续输出两个2时就不对了,例如输入8应该得到2*2*2.得到是2*420的时候得到是2*5... C语言分解质因数,连续输出两个2时 就不对了,例如输入8 应该得到2*2*2. 得到是2*4 20的时候 得到是2*5 展开
 我来答
txdyr36
2018-10-24
知道答主
回答量:17
采纳率:66%
帮助的人:9万
展开全部
你的代码有两处错误或不完善的地方,以下是我对你的代码的修改:
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
for(i=2;i<=n;i++){//将2000换成n,也就是被除数,除数比被除数大,除来也就没有意义了
if(n%i==0){
printf("%-2d",i);
n=n/i;
i=1;//将2改为1后。i在完成一次for语句后才会进行i++,如果你设置为2的话,再加就会变成3,这就是你之前错误的原因
}
if(n==1) break;
}
}
}
}
以上就是我的回答,具体错误都在代码中备注出来了,如果我的回答对你有用的话,务必采纳一下!抱拳!谢了!
追问
按照你改成i=1对了。谢谢了,我一开始以为是n的错误,想着n改变了,所以改成2000,题目给的最大数是2000. 非常感谢。
花飞舞2014
2018-10-24 · TA获得超过683个赞
知道小有建树答主
回答量:639
采纳率:53%
帮助的人:84.8万
展开全部
你的代码有两个问题:
1.没判断i是不是质数
2.没有把n/i之后的i回到初始值2
你可以参考一下下面的代码:
#include "stdio.h"

int prime(int x){
for(int y=2;y<x-1;y++){
if(x%y==0 && x!=2){
x=0;
break;
}
}
return x;
}

void main(){
int a;
scanf("%d",&a);
for(int x=2;x<2000;x++){
if(prime(x)==x && a%x==0){
if(prime(a)==0){
a=a/x;
printf("%d×",x);
x=1;
}else{
printf("%d",a);
break;
}
}
}
}
追问
非常感谢,是i的原因,没有归2。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-09-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6282万
展开全部

有这样几个问题:

  1. 声明的二维数组是aaa,但代码中应用时又变成了a,会产生a未定义错误。

  2. int aaa[3][100000];数组太大,建议使用全局变量或动态数组;改成int a[3][1000];更好。

  3. a[3][z]=a[1][j];这里和jj=a[3][z]*1;这里数组a都越界了。声明的a第一维是3,即0、1、2,不可能有[3]。

    把这些错误改了再说。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式