c++利用函调用的方法求完数 然后像6=1+2+3这样输出

来源:百度知道 编辑:UC知道 时间:2024/05/29 12:19:20
c++利用函调用的方法求完数 然后像6=1+2+3这样输出
下面看我编的好多问题啊
#include <iostream>
using namespace std;
bool perfect(int num)
{int sum=0;
for(int i=1;i<=num/2;i++)
{
if(num%i==0)
sum+=i;
{if(num==sum)
return 1;
else
return 0;}
}
}
void print()
{
int i;
cout<<" "<<1<<" ";
for(i=2;i<1000;i++)
if(perfect(i))
cout<<" "<<i<<" ";
}

int main()
{
for(int i=1;i<=1000;i++)
{if(perfect(i))
print();}
return 0;
}

你的程序错误是挺多的,首先是perfect函数有错误,首先求出一个数num所有的因数之和,所以for(int i=1;i<=num/2;i++)
{
if(num%i==0)
sum+=i;
这句后面循环就结束,然后在判断sum是不是等于num,如果是就返回1,否则返回0;你这个函数的括号用乱了。你再仔细分析一下。
然后就是print函数完全写错了,都已经判断除了一个数是不是完数,直接把是完数传递进入然后打印就是嘛,你那里又判断一次是什么意思?完全搞不懂,你可以好好分析一下我修改的程序,我运行通过的。
#include <iostream>
using namespace std;

bool perfect(int num)
{
int sum=0;
for(int i=1;i<=num/2;i++)
{
if(num%i==0)
sum+=i;
}
if(num==sum)
return 1;
else
return 0;
}

void print(int num)
{
// cout<<" "<<1<<" ";
// for(i=2;i<1000;i++)
// if(perfect(i))
// cout<<" "<<i<<" ";
cout<<num<<"=";
for(int i=1;i<=num/2;i++)
{
if(num%i==0&&i!=num/2) cout<<i<<"+";
else if(i=num/2) cout<<i<<endl;
}