寻找1000以内的完数并输出其因数

题目
一个数字刚好等于它的因数之和,被称之为完数。编程序找出1000之内的所有完数,并按照下列形式输出因子:
6 its factors are 1, 2, 3
解题思路
先找出完数,其次再找出它的因子
注释给的很清晰,可以看看👀
答案如下

int PerNum(int num) {
    int sum = 0;
    for (int i = 1; i < num; i++) {     //此循环和下面的return两个加起来可以找到完数
        if (num % i == 0) {             //num和主函数中的n等价
            sum += i;                   //得出sum的值用于下面判断是否正确
        }
    }
    return sum == num;                  //此处验证sum与num(主函数中的n)是否相等,若不相等,下面的if会将其排除
}
int main(void) {
    printf("1000以内的完数有:\n");
    for (int n = 1; n <= 1000; n++) {
        if (PerNum(n)) {                 //如果里面的函数不成立的话就不进行下一步啦
            printf("%d 的因子是:", n);
            for (int i = 1; i < n; i++) { //这里是寻找n的因数并输出,注意这里i要小于n
                if (n % i == 0) {
                    printf("%d ", i);     //如果取余为0证明就是它的因子,输出就行
                }
            }
            printf("\n");               //这里换行会使运行结果更加美观
        }
    }
    return 0;
}

我认为难点还是在PerNum这个函数里面,感觉有点绕,多琢磨琢磨吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值