【发布时间】:2019-12-09 20:46:55
【问题描述】:
如果自然数 n > 0 的真因数之和(不包括它自己)大于它自己,则称其为丰富数。例如,数字 12 是一个丰富的数字,因为它的除数之和是 1+2+3+4+6=16,大于 12 本身。相反,16 不是一个丰富的数字,因为它的除数之和是 1+2+4+8=15,不大于 16。我必须编写一个程序,对于任何输入的自然数 k,打印所有小于或等于 k 的丰富数。我编写了以下程序:
#include <stdio.h>
int main (void) {
int k, sum=0, i, n;
printf ("Enter k: ");
scanf ("%d", &k);
for (i=1; i<=k; i++) {
int n=1;
if (n%i==0);
sum+=i;
}
if (n<sum);
printf ("%d", &n);
return 0;
}
此程序的输出与预期不符。例如,如果我输入 16(或任何其他自然数),则输出为 6356716,这肯定是不正确的。我刚开始学习编程,我们刚开始学习函数,所以我写了这个:
#include <stdio.h>
int abundant (int n)
{
int i, sum=0;
for (i=0; i<n; i++)
if (n%i==0) sum+=i;
if (n<sum) return 1;
else return 0;
}
int main (void)
{
int i, k;
printf ("Enter a number: ");
scanf ("%d", &k);
for (i=1; i<=k; i++) {
if (abundant(i))
printf ("%d",&i);
}
return 0;
}
但输出完全相同。谁能告诉我我做错了什么?
【问题讨论】:
-
这个程序没有bug,但是输出却不如预期——你不觉得这个说法有问题吗?
-
无论如何,将
printf ("%d",&i);替换为printf ("%d",i);,它可能会起作用。 -
在第一个示例中,您必须删除
if条件后的分号 -
出于兴趣,您使用的是哪个编辑器?我不明白 2019 年源代码怎么可能缺少缩进。此外,启用警告会有所帮助,比如可能会告诉您 for 循环内的
int n=1;会遮蔽外部变量。 -
@user3386109:我坚信
if (n%i==0);这样的事情在 2019 年是不可能的。因为警告,并且因为下一行没有缩进。