C语言,分解质因数
C语言分解质因数,连续输出两个2时就不对了,例如输入8应该得到2*2*2.得到是2*420的时候得到是2*5...
C语言分解质因数,连续输出两个2时 就不对了,例如输入8 应该得到2*2*2. 得到是2*4 20的时候 得到是2*5
展开
3个回答
展开全部
你的代码有两处错误或不完善的地方,以下是我对你的代码的修改:
#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;
}
}
}
}
以上就是我的回答,具体错误都在代码中备注出来了,如果我的回答对你有用的话,务必采纳一下!抱拳!谢了!
#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. 非常感谢。
展开全部
你的代码有两个问题:
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;
}
}
}
}
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有这样几个问题:
声明的二维数组是aaa,但代码中应用时又变成了a,会产生a未定义错误。
int aaa[3][100000];数组太大,建议使用全局变量或动态数组;改成int a[3][1000];更好。
a[3][z]=a[1][j];这里和jj=a[3][z]*1;这里数组a都越界了。声明的a第一维是3,即0、1、2,不可能有[3]。
把这些错误改了再说。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询