问题描述
- 请问这个程序到底出了什么问题???
-
/*The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?求最大质因数*/
#include
int ifprime(int x){//判断是否是质因数
int i;
if(x<=1)
return 0;
else if(x==2)
return 1;
else{
for(i=2;i<=(x-1)/2;i++){
if(x%i==0)
return 0;
}
return 1;
}
}
void main(){
int i,x,a[1000],j=1,k,max=0;
int ifprime(int);
printf("please input the number:");
scanf("%d",&x);
for(i=2;i<=(x-1)/2;i++){
if(x%i==0){
if(ifprime(i))
a[j++]=i;
}
}
for(k=1;;k++){
if(a[k]>max)
max=a[k];
}
printf("the largest prime factor is:%d/n",max);
}
编译组建都没有问题,但运行就会出现“Access Violation”,为什么???
解决方案
for(k=1;;k++){
if(a[k]>max)
max=a[k];
}这个是个死循环,会无限给数组a添加成员,造成了数组越界
解决方案二:
for (k = 1;; k++){
if (a[k]>max)
max = a[k];
这里k没有上限
而你的a最大只有1000
解决方案三:
for循环中没有对条件进行判断,它当然会无限循环
解决方案四:
/*The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?求最大质因数*/
#include <stdio.h>
int ifprime(int x)
{
//判断是否是质因数
int i ;
if(x<=1)
return 0 ;
else if(x==2)
return 1 ;
else
{
for(i=2;i<=(x-1)/2;i++)
{
if(x%i==0)
return 0 ;
}
return 1 ;
}
}
void main()
{
int i,x,a[1000],j=1,k,max=0 ;
int ifprime(int);
printf("please input the number:");
scanf("%d",&x);
for(i=2;i<=(x-1)/2;i++)
{
if(x%i==0)
{
if(ifprime(i))
a[j++]=i ;
}
}
for(k=1;k<1000;k++)//擦,循环条件都没有
{
if(a[k]>max)
max=a[k];
}
printf("the largest prime factor is:%dn",max);
}
解决方案五:
CSDN的这一块的排版太差了啊
解决方案六:
求教:
改为
for(k=1;k<=1000;k++){
if(a[k]>max)
max=a[k];
}
后程序运行结果还是不对,能帮我看一下这个程序到底哪里有问题吗?