C语言中很简单一个问题,请各位帮助

来源:百度知道 编辑:UC知道 时间:2024/06/04 17:46:23
4. 如果一个数恰好等于它的所有因子(因子就是所有可以整除这个数的数,但是不包括这个数自身.)之和,则称之为“完数”。例如6的因子是1,2,3,且6=1+2+3,因此6是完数。
编写程序找出1000之内的所有完数及这些完数的和。 实验步骤与要求如下:
① 阅读如下算法,要求使用for循环实现。
(1) sum=0,m=2
(2) 当m<=1000时,反复执行(2.1)(2.2)(2.3)(2.4),否则转(3)
(2.1)k=m/2,n=0,j=1
(2.2)当j<=k时,反复执行(2.2.1)(2.2.2) ,否则转(2.3)
(2.2.1) if j是m的因子则执行n=n+j
(2.2.2) j++
(2.3) if m=n 则输出完数m, 计算sum=sum+m
(2.4)m++
(3)输出sum值

②结果输出形式为:完数1+完数2...=完数和的值

这里用了一个宏定义一个数组大小,可根据实际需要确定,1000内完数实际上只有3个。

1、VC++版:

//完数是指一个数恰好等于它的因子之和,如6=1+2+3
#include<iostream>
#include<conio.h>
using namespace std;
#define MaxSize 10 //宏定义
int main()
{
int m,j,n,sum=0,k=0;
int c[MaxSize];//数组,用来保存完数(为了最后输出“完数1+完数2+...=和”时用的)
for(m=2;m<=1000;m++)
{
n=0;
for(j=1;j<m;j++)
{
if((m%j)==0)n+=j;//判断是否是m的因子
}
if(m==n)//判断因子和是否与原数相等
{
cout<<m<<endl;//输出完数并换行
sum+=m;//完数和
c[k++]=m;//记录该完数
}
}
//下面以“完数1+完数2+...=完数和”的形式输出结果
for(j=0;j<k-1;j++)
{
cout<<c[j]<<'+';
}
cout<<c[k-1]<<'='<<sum;
getch();
return 0;
}

————————————————————
2、TC版:

#include<stdio.h>
#include<conio.h>

#define MaxSize 10
int main()
{
int m,j,n