如何检查小于整数变量的数字是否包含特定数字

时间:2013-07-01 05:45:20

标签: c while-loop

我有一个问题:我应该建立一个程序,当我输入一个低于一百的整数时,所有小于所述整数且包含数字“3”的数字出现在屏幕上(等等,如果我输入14 ,数字“3,13”应该出现。)

但是,我的代码有问题,请帮忙!谢谢!

代码:

#include <stdio.h>

int main(int argc, const char * argv [])
{
    int wholenumber;
    printf("百以内の整数を入力してください\n");
    scanf_s("%d", &wholenumber);

    while(0 <wholenumber)
        {
            wholenumber--;

        while(0 < wholenumber){
        wholenumber = 3 %10;
        wholenumber = 3 /10;

         if (wholenumber == 3);
         {printf("%3d",wholenumber);}
    }
    }
    return 0;
}

6 个答案:

答案 0 :(得分:1)

我不知道你对这段代码的意图是什么:

 wholenumber = 3 % 10;
 wholenumber = 3 / 10;

第一行将变量设置为3,第二行设置为0 ..这会强制程序退出循环。

答案 1 :(得分:1)

如果x是0到99之间的整数,则以下内容将检查其中任何一个数字是否为3

if (x / 10 == 3 || x % 10 == 3) {
   ...
}

我把剩下的作为练习留给读者。

答案 2 :(得分:0)

代码:

#include<stdio.h>

int main()
{
    int i,num;
    int t1,t2;             // Variable to store data temporary
    printf("\nEnter the number : \n");
    scanf("%d",&num);

    for(i=0;i<num;i++)
    {
     t1= i/10;
     t2= i%10;

     if((t1==3) || (t2 ==3))   //check if number has 3 in it
       printf(" %d", i);

    }
return 0;
}

这是必需的代码。感谢@amulous指出错误。 注意:根据提出问题的用户的要求,假设输入的数字小于100.

答案 3 :(得分:0)

你可以更有效地写这个,这适用于任何上限:

#include <stdio.h>

int main(int argc, const char * argv [])
{
    int wholenumber;
    printf("百以内の整数を入力してください\n");
    scanf("%d", &wholenumber);
    for (int tens = 1; tens < wholenumber; tens *= 10) {
        for (int i = 3 * tens; i < wholenumber; i+= 10*tens) {
            printf("%3d\n", i);
        }
    }
    return 0;
}

答案 4 :(得分:0)

#include <stdio.h>

int contain3(int n){
    if(n == 0) return 0;
    return (n % 10 == 3) ? 1 : contain3(n/10);
}

int main(void){
    int i, wholenumber;
    printf("百以内の整数を入力してください\n");
    scanf_s("%d", &wholenumber);

    for(i=3;i<wholenumber;++i)
        if(contain3(i))
            printf("%3d", i);

    return 0;
}

#include <stdio.h>
#include <limits.h>

int main(void){
    int i, wholenumber;
    int data[]={3,13,23,30,31,32,33,34,35,36,37,38,39,43,53,63,73,83,93,INT_MAX};
    printf("百以内の整数を入力してください\n");
    scanf_s("%d", &wholenumber);

    for(i=0;data[i]<wholenumber;++i)
        printf("%3d", data[i]);

    return 0;
}

答案 5 :(得分:0)

OP解决方案的概念非常接近但需要改变。

  1. while()循环测试会破坏wholenumber。 “3”遏制的测试应使用wholenumber

  2. 的副本
  3. wholenumber = 3 /10;的语法应为wholenumber_test / = 10;

  4. 其他语法错误。


  5. void whole(int wholenumber, int digit) {
      while (0 < wholenumber) {
        int test = wholenumber;  // form test value
        while (0 < test) {
          if ((test%10) == digit) {
            printf("%3d\n", wholenumber);
            break;  // no need to test other digits
          }
          test /= 10;  // move onto next digit
        }
        wholenumber--;
      }
    }