输出1-1000以内的完数遇到问题
我想对1-1000以内的数进行操作,
如果是完数,则输出:如6 its factors are 1,2,3.
如果不是完数,则输出:如2,no
但是输出的结果是一大片空白,到了840这个数才输出840,no,想知道原因,求大lao帮忙解答,谢谢!
#include
int iswanshu(int n);
void showfactors(int n);
int maxfactor(int n);
int main()
{
int i;
for(i=2;i<1001;i++)
{
if(iswanshu(i))
{
printf("%d its factors are ",i);
showfactors(i);
}
else printf("%d,no\n",i);
}
return 0;
}
int iswanshu(int n)
{
int i;
int s=0;
for(i=1;iif(n%i==0) s+=i;
}
if(s==n) return 1;
else return 0;
}
int ismaxfactor(int n)
{
int i;
for(i=n-1;i>=1;i--)
{
if(n%i==0)
{
return 1;
}
}
}
void showfactors(int n)
{
int i;
for(i=1;iif(n%i==0)
{
printf("%d",i);
if(!ismaxfactor(n)) printf(",");
if(ismaxfactor(n)) printf(".\n");
}
}
}
根据您提供的代码,我发现问题出在ismaxfactor函数中。该函数没有返回值,而在showfactors函数中使用了该函数的返回值作为判断条件,导致程序出错。您可以将ismaxfactor函数的返回类型改为int类型,并在函数末尾加上return 0;语句来解决这个问题。另外,您在showfactors函数中的一些语句也可以进行简化。修改后的代码如下:
#include<stdio.h>
int iswanshu(int n);
void showfactors(int n);
int ismaxfactor(int n);
int main()
{
int i;
for(i=2;i<1001;i++)
{
if(iswanshu(i))
{
printf("%d its factors are ",i);
showfactors(i);
}
else printf("%d, no\\n",i);
}
return 0;
}
int iswanshu(int n)
{
int i;
int s=0;
for(i=1;i<n;i++)
{
if(n%i==0) s+=i;
}
if(s==n) return 1;
else return 0;
}
int ismaxfactor(int n)
{
int i;
for(i=n-1;i>=1;i--)
{
if(n%i==0)
{
return 1;
}
}
return 0;
}
void showfactors(int n)
{
int i;
for(i=1;i<n;i++)
{
if(n%i==0)
{
printf("%d",i);
if(!ismaxfactor(n)) printf(",");
}
}
printf(".\\n");
}
if(ismaxfactor(n)) printf(".\n");
空白是这里产生的,调试下
参考GPT和自己的思路:
问题出现在函数ismaxfactor中。当n为1时,for循环直接跳过,函数没有返回值,导致程序出现未知错误,产生大量的空白输出。解决方法是给ismaxfactor函数加上一个默认的返回值0。
修改后的代码如下: