1 条题解
-
0
分析:
程序的主要思路是不断读取输入的整数,对于每个输入的整数,计算它所有因数(除自身外)的和,然后根据因数和与该整数本身的大小关系,将其分类为亏数、完全数或盈数,并输出相应的结果。当输入为 0 时结束输入过程,最后输出结束标记。
解题原理
1.因数计算:通过循环从 1 到该数的平方根(i*i<=n)来寻找因数。如果 n 能被 i 整除且 n/i 不等于 i,那么 i 和 n/i 都是 n 的因数,将它们加到因数和 sum 中;如果 n 能被 i 整除且 n/i 等于 i,说明 i 是 n 的平方根,只将 i 加到因数和 sum 中。
2.数的分类判断:计算完因数和 sum 后,将 sum 减去该数本身(因为在计算因数和时包含了该数本身,需要减去)。然后比较 sum 和该数本身的大小关系:如果 sum 小于该数,那么该数是亏数;如果 sum 等于该数,那么该数是完全数;如果 sum 大于该数,那么该数是盈数。
实现步骤
1.输入处理:使用 while 循环不断读取输入的整数 n,将非零的整数存储到数组 num 中,并记录输入的整数个数 count,当输入为 0 时停止输入。
2.输出标题:输出 PERFECTION OUTPUT 作为结果输出的标题。
3.数的分类判断与输出:遍历数组 num,对每个存储的整数调用 trans 函数,在 trans 函数中计算因数和并根据大小关系输出该数是亏数、完全数还是盈数的判断结果。
4.输出结束标记:输出 END OF OUTPUT 作为整个程序输出的结束标记。
c++代码:
#include <iostream> #include <iomanip> using namespace std; void trans(int n){ int sum=0; for(int i=1;i*i<=n;i++){ //计算因子和 if(n%i==0 && n/i!=i){ sum+=(i+n/i); } if(n%i==0 && n/i== i){ sum+=i; } } sum-=n; if(sum<n) cout<<setw(5)<<n<<" DEFICIENT"<<endl; if(sum==n) cout<<setw(5)<<n<<" PERFECT"<<endl; if(sum>n) cout<<setw(5)<<n<<" ABUNDANT"<<endl; } int main() { int n,count=0,num[100]; while(cin>>n && n){ num[count] = n; count++; } cout<<"PERFECTION OUTPUT"<<endl; for(int i=0;i<count;i++){ trans(num[i]); } cout<<"END OF OUTPUT"<<endl; return 0; }
- 1
信息
- ID
- 529
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 1
- 上传者