题目>>>
一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如,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;
}
实图>>>
最重要的话>>>
不理解的记得私信我哦 ^ ^。
嘿嘿 ^ ^
文章评论