poj1528结题报告

首先不得不说是很简单一道水题,只要简单地求其因数之和判断是否为完全数就可以了,唯一需要注意的就是临界值当输入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";
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值