#include <iostream> using namespace std; int pre(int a[],int p){ int i=0,sum; while(true){ if(a[i]==0){ break; } sum+=a[i]; i++; } return sum; } int main(){ int p; cin>>p; int a[10000]; int j=0; int s=0; for(int i=1;i<p;i++){ if(p%i==0){ a[j]=i; s+=i; j++; } } int temp=0; bool b=false; for(int i=0;i<j;i++){ if(s-a[i]*2==p){ temp=a[i]; b=true; break; } } if(p==s){ cout<<"Perfect"<<endl; }else{ if(b){ cout<<temp<<endl; }else{ cout<<"Neither"<<endl; } } }
时间: 2024-01-14 09:04:52 浏览: 131
这是一个判断完全数或者是亏数的 C++ 程序,输入一个正整数 p,输出该数是完全数、亏数还是多余数,并在后面的行中输出它的因子之和中是否存在一个数,它的两倍等于 p。
程序的实现方法是:先计算出 p 的所有约数,并计算它的因子之和 s。然后遍历所有约数,判断是否存在一个数,它的两倍等于 p 减去该数,如果存在,就输出这个数,如果不存在,则输出 Neither。如果 p 的因子之和等于 p,则输出 Perfect。
程序的主要代码如下:
```c++
int p;
cin >> p;
int a[10000];
int j = 0;
int s = 0;
for (int i = 1; i < p; i++) {
if (p % i == 0) {
a[j] = i;
s += i;
j++;
}
}
int temp = 0;
bool b = false;
for (int i = 0; i < j; i++) {
if (s - a[i] * 2 == p) {
temp = a[i];
b = true;
break;
}
}
if (p == s) {
cout << "Perfect" << endl;
} else {
if (b) {
cout << temp << endl;
} else {
cout << "Neither" << endl;
}
}
```
其中,pre 函数是求一个数组中前 n 个元素的和,如果数组中不足 n 个元素,则返回前面所有元素的和。但是这个函数在程序中没有被使用,所以可以删除。
程序的完整代码如下:
阅读全文