系列的第n个元素,其中数字可以被数字的总和整除

时间:2017-09-15 10:48:10

标签: c function

我应该编写一个从输入读取正整数n的程序,并输出该系列的第n个元素(可以用它们的数字之和整除的数字)。这个系列的第一个元素是1,最后一个是10 ^ 6(前20个条目:1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 12; 18; 20; 21; 24 ; 27; 30; 36; 40; 42; ......)。代码下载工作正常,但我不应该使用函数。那么如何将函数中的代码放入for循环中。我遇到了一些问题而无法找到解决方案。

#include <stdio.h>
static int digsum(int n)
{
    int sum = 0;
    do{
        sum += n % 10;
    } while (n /= 10);
    return sum;
}

int main(void)
{
    int n, done, j, temp, temp1,i;
    scanf("%d", &temp);
    for (i = 1, j = 0; i < 1000; i++) {
        if (i % digsum(i) == 0) {
            if (j++ <= temp - 1) {
                printf("%d ", i);
                temp1 = i;
            }
        }
    }
    printf("temp1 %d\n", temp1);
    return 0;
}

如果我输入20,我的输出需要为42。

2 个答案:

答案 0 :(得分:2)

尝试使用以下代码

 #include <stdio.h>

 int main(void)
 {
   int n, done, j, temp, temp1,i,sum,k;
   scanf("%d", &temp);

   for (i = 1, j=0; i<1000; i++) {

   /*Implement the function digsum() right away inside main() and create local variables */ 

   k = i; //Taking a copy of i as in the while() condition check the value changes
   sum = 0;
   do{ 
      sum += k % 10;
   }while (k /= 10);
   if(i % sum == 0) {
        if (j++ <= temp-1) {
        printf("%d ", i);
        temp1=i;
        }
     }
  }
 printf("temp1 %d\n", temp1);
 return 0;
 }

答案 1 :(得分:1)

我不确定你为什么不想使用这个功能,但是你去了:

放置代码段

 n = i;
 int sum = 0;
 do{
     sum += n % 10;
 }while (n /= 10);

for函数的main循环开头,并将if (i % digsum(i) == 0)更改为if (i % sum == 0)

int main(void)
{
    int n, done, j, temp, temp1, i;
    scanf("%d", &temp);
    for (i = 1, j=0; i<1000; i++) {
        n = i;
        int sum = 0;
        do{
            sum += n % 10;
        }while (n /= 10);

        if (i % sum == 0) {
            if (j++ <= temp-1) {
                printf("%d ", i);
                temp1=i;
            }
        }
    }
    //printf("temp1 %d\n", temp1);
    return 0;
}