如何实施数字河流?

How to implement a Digital River?

数字河流是一个数字序列,其中每个数字后跟相同的数字加上其数字的总和。

我有一个逻辑问题,我无法弄清楚如何循环我的代码以使其执行 20 次。

第一个数字=> KUL_digitsum = sum = 6 => KUL_NEXTRIVERNUM = 123 + 6 = 129 => KUL_Digitsum * 20

Exercise

#include <stdio.h>
#include "KuL_RiverFkt.h"

int main()
{
    int num;
    printf("Eingabe der Zahl: ");
    scanf("%d", &num);

    KUL_NextRiverNum(KUL_digitsum(num), num);

    for (int i = 0; i < 20; i++) {
        KUL_NextRiverNum(KUL_digitsum(num), num);
        KUL_digitsum(KUL_NextRiverNum(KUL_digitsum(num), num));
    }
    return 0;
}

int KUL_digitsum(int num) 
{
    int sum = 0;
    while (num > 0) {
        int digit = num % 10;
        sum = sum + digit;
        num = num / 10;
    }
    printf("Die Summe der Zahl = %d\n", sum);
    return sum;
}

int KUL_NextRiverNum(int KUL_digitsum, int num)
{
    int summe = 0;
    summe = num + KUL_digitsum;
    printf("Die Nächste Riverzahl ist: %d\n", summe);
    return summe;
}

您的代码过于复杂,您忽略了 KUL_NextRiverNum 的 return 值。

KUL_* 函数本身是正确的,但除非出于调试原因放置 printfs,否则它们不应进行任何打印。

你想要这个:

int main()
{
  int num;
  printf("Eingabe der Zahl: ");
  scanf("%d", &num);

  for (int i = 0; i < 20; i++) {
    num = KUL_NextRiverNum(KUL_digitsum(num), num);
  }

  return 0;
}
  • 只需在这些函数中注释 printf() 并更改主要内容,例如:
#define MAX_RIVER_TERMS 20

//    KUL_NextRiverNum(KUL_digitsum(num), num);

    for (int i=0; i < MAX_RIVER_TERMS; i++) {
        if (i) printf (", ");
        printf ("%d", num);
        num = KUL_NextRiverNum(KUL_digitsum(num), num);
//        KUL_digitsum(KUL_NextRiverNum(KUL_digitsum(num), num));
    }
  • 在源代码中使用 #define 宏值而不是幻数。
  • Declare/qualify 参数作为 const 如果它们没有在函数内部被修改。
int KUL_NextRiverNum(const int KUL_digitsum, const int num) {}