[C语言] [试题详解] 求1000之内的所有 完数

题目>>>

        一个数如果恰好等于它的因子之和,这个数就称为“完数”。
        例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
        编程序找出1000之内的所有完数,并按下列格式输出其因子。

                6 its factors are 1、2、3。 

注意: 
           完数定义:某自然数除它本身以外的所有因子之等于该数,则该数被称为完数。所以1不是完数,就不用考虑1啦。^ ^

思考>>>

        首先得找出每个数的所有因子,然后再相加判断以确定该数是不是完数。那么1000以内(除0和1)的数都得找一遍还要输出因子。emmm一定要用循环了!为了简化运算我们可以定义一个函数来求完数,因为也许下次我们还需要求完数之类的,有了函数这样会更方便一点。

        那么重点之一:找因子。只有因子能被原数整除那么只要原数把低于自身的数都出一遍就可以筛选出因子了(所以大量重复就使用循环),但注意此处用求余(%)为0,即能被整除的运算。

        我们已经写好了求完数的函数那么接下来要找到1000以内的所以完数,只需把1000以内的每个数当做参数传给上文函数就好了。同时要输出因子,那么就在写一边上文总结的方法即可。

代码>>>

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int X(int y);                                        //函数的声明此处记得写分号!!
int main()
{
    int i = 1000;
    int a = 0;
    for (; i > 0; i--)
    {
        if (X(i) != 0)                                 //如果 i 是完数则执行
        {
            printf(" %d  its factors are ", i);
            for (a = i - 1; a > 0; a--)
            {
                if (i % a == 0)
                    printf(" %d、", a);            //输出因子
            }
            printf("\b\b。\n");                     //“\b”退格符“\n”换行符
        }                                                //关于这里的输出就留个大家想想na

    }
    return 0;
}
int X(int y)
{              
    int q = 0; 
    int w = 0;
    int e = 0;
    for (q = y - 1; q > 0; q--)
    {
        if (y % q == 0)
            w += q;

    }
    if (w == y)                //如果因数之和等于原数则原数为完数返回其原数
        return y;              //如果因数之和不等于原数则原数不是完数返回值为0
    else return 0;
}

实图>>>

最重要的话>>>

         

            不理解的记得私信我哦 ^ ^。

嘿嘿 ^ ^

 

  • 50
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值