我应该编写一个从输入读取正整数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。
答案 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;
}