首先不得不说是很简单一道水题,只要简单地求其因数之和判断是否为完全数就可以了,唯一需要注意的就是临界值当输入1时
由于其因数只有其本身,所以对应的因数之和不能包含其本身,所以对于“1”来说因数之和是0;
这个故事告诉为我们临界值要好好考虑;以下为AC的代码
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
string type(int num);
int main()
{
int number[100]={1};
int times=0;
for(int i=0;i<100;i++)
{
cin>>number[i];
if(number[i]==0)
{
times=i;
break;
}
}
cout << "PERFECTION OUTPUT" << endl;
string string1[100];
for(int j=0;j<times;j++)
{
string1[j]=type(number[j]);
cout<<setw(5)<<number[j]<<" "<<string1[j]<<endl;
}
cout<<"END OF OUTPUT"<<endl;
return 0;
}
string type(int num)
{
int num1=1;
if (num==1)
num1=0;
else{
for(int k=2;k<=(num/2);k++)
{
if(num%k == 0)
num1=num1+k;
}
}
if(num1==num)
return "PERFECT";
else if(num1>=num)
return "ABUNDANT";
else
return "DEFICIENT";
}
将代码在精简一下就很简单了:
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
string type(int num);
int main()
{
int number[100]={1};
int times=0;
while(cin>>number[times] && number[times])
times++;
cout << "PERFECTION OUTPUT" << endl;
string string1[100];
for(int j=0;j<times;j++)
{
string1[j]=type(number[j]);
cout<<setw(5)<<number[j]<<" "<<string1[j]<<endl;
}
cout<<"END OF OUTPUT"<<endl;
return 0;
}
string type(int num)
{
int num1=1;
if (num==1)
num1=0;
else{
for(int k=2;k<=(num/2);k++)
{
if(num%k == 0)
num1=num1+k;
}
}
if(num1==num)
return "PERFECT";
else if(num1>=num)
return "ABUNDANT";
else
return "DEFICIENT";
}