C程序打印100到1000之间的数字,其中数字的总和是20

时间:2014-12-06 08:16:51

标签: c for-loop

我正在编写一个C程序,它应该显示100到1000之间的所有数字,其中数字的总和是20.我在这里尝试了这个代码,但是当我编译它时它只显示0作为输出,你能帮助我吗? ?我也尝试在while循环之外移动if(iVsota == 20)。我正在使用Orwell Dev C ++ IDE。

#include <stdio.h>

int main (void)
{
    int iVnos=0;
    int iOstanek=0;
    int iVsota=1;
    int iStevec1=100;

    for(iStevec1=100; iStevec1<1000; iStevec1++)
    {
        while(iStevec1>0)
        {
            iOstanek=iStevec1%100;
            iStevec1=iStevec1/10;
            iVsota=iOstanek+iVsota;
            if(iVsota==20)
            {
                printf("%i\n", iStevec1);
            }
        }
    }
    return(0);

我希望这更好。

5 个答案:

答案 0 :(得分:2)

你的循环应该如下:

  for(iStevec1=100; iStevec1<1000; iStevec1++)
    {
      int c2 = iStevec1/100; // extract third digit
      int c1 = (iStevec1%100)/10; // extract second digit
      int c0 = (iStevec1%10); // extract first digit
      if((c0+c1+c2)==20) // sum and verify
        {
          printf("%i\n", iStevec1);
        }
    }

答案 1 :(得分:0)

这里有一个更通用的方法来获得整数中所有单个数字的总和(假设为正整数):

int getSumOfDigits(int x)
{
    int sum = 0;
    while (x > 0)
    {
        sum += x % 10;
        x = x / 10;
    }
    return sum;
}

int main()
{
    for (int i = 100; i <= 1000; i++)
    {
        if (getSumOfDigits(i) == 20)
        {
            printf("%d\n", x);
        }
    }    
}

表达式x % 10是整数中的最后一位数。因此,这就是我们添加的内容。然后我们将整数中的最后一位除以10除去。重复直到我们达到零。

答案 2 :(得分:0)

这应该适合你:

(更改了变量名称,使其更具可读性)

#include <stdio.h>

int add_digits(int n) {
    static int sum = 0;

    if (n == 0)
       return 0;

    sum = n%10 + add_digits(n/10);
    return sum;

}

int main() {

    int start, end;
    start = 100, end = 1000;

    for(start = 100; start <= end; start++) {

        if(add_digits(start) == 20)
            printf("Number: %d\n", start);
    }

    return 0;

}

编辑:

(您的代码已修复为评论作为解释)

#include <stdio.h>

int main() {

    int iVnos=0;
    int iOstanek=0;
    int iVsota=0;
    int iStevec1=100;
    int temp;  //temp needed

    for(iStevec1=100; iStevec1<=1000; iStevec1++)
    {

        temp =iStevec1; //assign number to temp
        iVsota=0;  //set sum every iteration to 0
        while(temp>0)
        {
            iOstanek=temp%10;  //You need only % 10 to get the last digit of a number
            temp = temp / 10;  //'delete' last digit of the number
            iVsota+=iOstanek;  //add digit to sum

        }

         if(iVsota==20)  //You only need to check the digits after sum is calculated
                printf("Number %d\n", iStevec1);

    }

    return 0;

}

答案 3 :(得分:0)

只需改变一件事就可以得到你想要的东西

    int main (void)
    {
        int iVnos=0;
        int iOstanek=0;
        int iVsota=1;
        int iStevec1=100;
        int temp;
        for(iStevec1=100; iStevec1<1000; iStevec1++)
        {
            temp = iStevec1;
            while(temp>0)
            {
                iOstanek=temp%100;
                temp=temp/10;
                iVsota=iOstanek+iVsota;
                if(iVsota==20)
                {
                    printf("%i\n", iStevec1);
                }
            }
        }
        return(0);
}

享受编码享受生活......

答案 4 :(得分:0)

替代方法,利用细节。

#include <stdio.h>
int main()
{
int c0, c1, c2; /* 3 digits sum to 20 */
    for(c0 = 2; c0 < 10; c0++){
        c1 = 11 - c0;
        c2 = 9;
        while(c1 < 10){
            printf("%d%d%d\n", c0, c1, c2);
/* or       printf("%3d\n", (c0*10+c1)*10+c2); */
            c1++;
            c2--;
        }
    }
    return(0);
}