这是洛谷B2127的问题:
题目描述
求正整数 2 和 n之间的完全数(一行一个数)。
完全数:对于一个自然数,所有比它小的所有因数之和,等于它本身,它就是个完全数。如 6=1+2+3。
输入格式
输入 n (n<=10000)。
输出格式
一行一个数,按由小到大的顺序。
这是我写的代码:
#include<iostream>
using namespace std;
int function(int i)
{
int sum=0;
for(int j=1;j<i;j++)
{
if(i%j==0)
sum+=j;
}
if(sum==i)
cout<<i<<endl;
}
int main()
{
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
function(i);
}
return 0;
}
洛谷答案显示运行超时,后面我去搜索正确的代码:
#include<iostream>
using namespace std;
int function(int i)
{
int sum=0;
for(int j=1;j<i;j++)
{
if(i%j==0)
sum+=j;
}
return sum;
}
int main()
{
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
if(function(i)==i)
cout<<i<<endl;
}
return 0;
}
我觉得两者的区别就是我是在函数里去输出值,而别人的代码是在函数里返回因数的和,再在主函数里判断然后输出答案,我不明白为什么我在函数里输出就会运行超时(我的代码运行结果是正确的)
感谢你看到这里,可以帮我解答下吗感谢您