【问题标题】:Program for abundant numbers <=k丰富数字的程序 <=k
【发布时间】: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",&amp;i); 替换为printf ("%d",i);,它可能会起作用。
  • 在第一个示例中,您必须删除if 条件后的分号
  • 出于兴趣,您使用的是哪个编辑器?我不明白 2019 年源代码怎么可能缺少缩进。此外,启用警告会有所帮助,比如可能会告诉您 for 循环内的 int n=1; 会遮蔽外部变量。
  • @user3386109:我坚信 if (n%i==0); 这样的事情在 2019 年是不可能的。因为警告,并且因为下一行没有缩进。

标签: c algorithm


【解决方案1】:

这段代码应该可以工作

#include <stdio.h>

int main(void)
{
    int k, i, j;
    printf("Enter k: ");
    scanf("%d", &k);
    for (i = 1; i <= k; i++)
    {
        int sum = 0;
        for (j = 1; j < i; j++)
        {
            if (i % j == 0)
                sum += j;
        }
        if (sum > i)
            printf("%d is abundant\n", i);
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2010-11-18
    • 2011-07-27
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2013-02-04
    • 2011-02-11
    相关资源
    最近更新 更多