永发信息网

一个数若刚好与小于它的所有因子之和相等,则称该数为一个"完数",如:6=1+2+3.求出10000以内的所有完数之和

答案:2  悬赏:0  手机版
解决时间 2021-04-01 14:07
一个数若刚好与小于它的所有因子之和相等,则称该数为一个"完数",如:6=1+2+3.求出10000以内的所有完数之和
最佳答案
我给楼主代码吧,C语言的!

#include
#include
void Input_1(int *, int *, bool *);
void Deal_1(int *, int *, int *);
void Deal_2(int *, int *);
void Deal_3(int *, int *, int *);
void Deal_4(int *, int *, int *);
void Output_1(int *, int *, bool *);
int main(void)
{
bool flag_1 = 1, flag_2 = 1;
while(flag_1)
{
int a, b, cont_1 =0;

Input_1(&a, &b, &flag_2);

Deal_1(&a, &b, &cont_1);

int * u = (int *)malloc(cont_1 * sizeof(int));

Deal_3(&a, &b, u);

Output_1(&cont_1, u, &flag_1);
}

return 0;
}
void Input_1(int * p, int * q, bool * r)
{
bool flag_1 = 1, flag_2 = 1;
while(*r)
{
printf("请按照提示输入要进行完数查找的起始数字和截止数字!\n");
*r= 0;
}
while(flag_1)
{
printf("请输入进行完数查找的起始数字(大于零的正整数):");
scanf("%d", p);
while(getchar() != '\n')
{
continue;
}
if(*p <1)
{
printf("您输入的数字有误,请按照提示重新输入!\n");
}
else
{
flag_1 = 0;
}
}
while(flag_2)
{
printf("请输入进行完数查找的截止数字(大于等于起始数字正整数):");
scanf("%d", q);
while(getchar() != '\n')
{
continue;
}
if(*q < *p )
{
printf("您输入的截止数字有误,请按照提示重新输入!\n");
}
else
{
flag_2 = 0;
}
}
return;
}
void Deal_1(int * p, int * q, int * s)
{
int i;
for(i=*p;i<=*q;i++)
{
Deal_2(&i, s);
}
}
void Deal_2(int * t, int * s)
{
int j, int sum = 0;
for(j=1;j<*t;j++)
{
if(*t % j == 0)
{
sum = sum + j;
}
}
if(*t == sum)
{
(*s)++;
}
}
void Deal_3(int * p, int * q, int * u)
{
int i, k = 0;
for(i=*p;i<=*q;i++)
{
Deal_4(&i, u, &k);
}
}
void Deal_4(int * t, int * u, int * v)
{
int j, int sum = 0;
for(j=1;j<*t;j++)
{
if(*t % j == 0)
{
sum = sum + j;
}
}
if(*t == sum)
{
*(u+ *v) = *t;
(*v)++;
}
}
void Output_1(int * s, int * u, bool * w)
{
char ch;
int i,j;
if(*s == 0)
{
printf("\n没有符合条件的数字!\n");
}
else
{
printf("\n符合条件的完数共有%d个,它(们)是:\n", *s) ;
for(i=0;i<*s;i++)
{
printf("%d,因子有:\n",*(u+i));
for(j=1;j<*(u+i);j++)
{
if(*(u+i)% j == 0)
printf("%-5d",j);
}
printf("\n");
}
}
printf("是否重新执行本程序?是请输入Y(y),否则退出程序:");
ch = getchar();
while(getchar() != '\n')
{
continue;
}
if(ch == 'Y' || ch == 'y')
{
printf("\n");
}
else
{
*w = 0;
}
}
全部回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谁有余罪2,
应该 可能 肯定 有什么区别 意思一样么
寿阳县景尚乡哪有吊车出租的?
阿林专业发型设计室怎么去啊,有知道地址的么
汽车信用卡一辆车能办几个银行的
崩坏学园23.8北欧秘银锤怎么样
篮球运动员的精彩细节描写
8266如何使用jlink
实在理解不了大家为什么说幻影是土豪职业
有一铜砚台不知道是什么年代的
春颂的概括
竹竿巷社区家政服务指南地址在什么地方,想过
逆战没开g被强行踢下线怎么回事
形容获得一点小成功而沾沾自喜的四字成语
青稞酒是哪个民族的
推荐资讯
已抵与以抵有什么区别
找出那位旅客态度变化的句子
中国好声音第二季的十六强学员都有谁
线路作业时变电站和发电厂的安全措施有哪些
哪位有《空镜救心》电子版的,发给我好吗?谢
05-17丨求助 moto360二代自动挂电话
金鱼池怎么座公交去潮阳公园
晴殇的歌词???
求mac西柚橘粉平价替代品
急需有关日语敬语论文的题目!!!
金鱼缸怎么供氧
拳皇97八神下B怎么接前C?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?