这是《C语言入门实战》系列的第9篇。
上一篇:C语言入门实战(8):switch-case计算下一天的年月日(平年/闰年计算)
文章目录
- 题目
- 要求
- 参考代码
- 代码复盘
输入任意一个正整数n,判断n是否为一个完数。
完数是指一个数恰好等于它的因子之和。例如6是一个完数,它等于它的因子 1、2、3的和。类似地28等于其因子1、2、4、7、14的和。
因子不包含自身,且各个因子不能重复。
请编程实现。
要求输入输出格式示例1:
输入:28<回车>
输出:yes
输入输出格式示例2:
参考代码输入:76<回车>
输出:no
#include代码复盘#include int main(int argc, char *argv[]) { int n; scanf("%d", &n); char* reply = "no"; // 题目说明了,因子不包含自身 // 所以,1不是完数,只需要处理>1的情况 if(n > 1) { // 1作为n(>=2)的因子 int factorSum = 1; // 计算>=2的其余因子,并累加之 int i; for(i=2;i*i<=n;i++) { if(n%i == 0) { // 找到一个因子i factorSum += i; // 另一个因子 int other = n/i; if(other != i) { factorSum += other; } } } // 判断因子的和是否等于n本身 if(factorSum == n) { reply = "yes"; } } // 打印输出答案 printf("%s", reply); return 0; }
头文件stdio.h中声明的scanf()和printf()是标准库中用于处理标准输入和输出的库函数。



