输出1~1000之间的所有完数,并输出每个完数的所有因子。所谓完数,就是指一个正整数,它的各因数之和等于其自身。例如,28=1+2+4+7+14,28是一个完数。
下面代码有错误,请指正。
代码如下, 如有帮助给个采纳谢谢
#include <iostream>
using namespace std;
// 计算一个数的所有因子的和
int sumOfFactors(int num) {
int sum = 0;
for (int i = 1; i <= num/2; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum;
}
int main() {
cout << "1~1000之间的完数有:" << endl;
for (int num = 1; num <= 1000; num++) {
if (num == sumOfFactors(num)) {
cout << num << "的因子为:1, ";
for (int i = 2; i <= num/2; i++) {
if (num % i == 0) {
cout << i << ", ";
}
}
cout << "它们的和等于" << num << endl;
}
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:Talk is cheap, show me the code.
#include <stdio.h>
#define LEN 10000
int main(void)
{
int i, k, m, n, s, p=0;
int a[100]; //存放各个因子
printf("Number as follows:");
for (i=2; i<= LEN; i++)
{
s = 0; //计算因子和
m = 0;
k = 1;
while (k <= i/2) //因为不算自身,所以剩余因子肯定<=i/2
{
if (i % k == 0) //如果k是i的因子
{
s += k;
a[m] = k;
m ++;
}
k ++;
}
if (s == i) //因子和 等于 数本身
{
p ++;
printf("\n%d\t= %d", s, a[0]);
n = 1;
while (n < m)
{
printf(" + %d", a[n]);
n ++;
}
}
}
printf("\nTotal Num: %d", p);
return 0;
}
代码中存在一个错误,for循环的第二个参数应该为i而不是j,因为完数的定义是所有因数之和等于它本身,所以第二层循环应该从1开始到i,而不是从1开始到i-1。另外,为了更好的阅读体验,可以添加一定的注释来解释代码的逻辑。修改后的代码如下:
#include <stdio.h>
int main()
{
int i,j,sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j<=i;j++) // 修改了循环条件
{
if(i%j==0)
sum=sum+j;
}
if(sum==i)
{
printf("%d, its factors are:",i);
for(j=1;j<i;j++)
{
if(i%j==0)
printf("%d ",j);
}
printf("\n");
}
}
return 0;
}