永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-04-01 14:07
  • 提问者网友:练爱
  • 2021-03-31 14:06
一个数若刚好与小于它的所有因子之和相等,则称该数为一个"完数",如:6=1+2+3.求出10000以内的所有完数之和
最佳答案
  • 五星知识达人网友:时间的尘埃
  • 2021-03-31 14:59
我给楼主代码吧,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;
}
}
全部回答
  • 1楼网友:旧脸谱
  • 2021-03-31 16:33
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯