如何检查变量是否包含特定数字?

时间:2019-09-05 12:42:14

标签: c

该代码应该接受用户输入的任何数字,并显示接下来的19个数字。应该怎么跳过其中有3,6,9的任何数字。

我设法编写了一个可以做到这一点的代码,但是直到100号为止。 而且我设法编写了另一个代码,可以接受用户的任何输入,并告诉您它是否具有特定的编号。但是我无法将这两个代码结合在一起。

此代码可以正常工作,直到数字100:

int A, B;
printf("Enter a number");
scanf("%d", &A);
int C;
int D = 20;
int F = 100;
for (; ; A++) {
    B = A % 10;
    C = A / 10;
    if (B == 3 || B == 6 || B == 9 || C == 3 || C == 6 || C == 9) {
        continue;
    }
    else {
        printf("%d\n", A);
            D = D - 1;
    }
    if (D == 1) {
        break;
    }
}

此代码可以在您要插入的任何数字上工作:

int A, B;
printf("Enter a number");
scanf_s("%d", &A);
while (A > 0)
{
    B = A % 10;
    A = A / 10;
    if (B == 3)
    {
        printf("there is a 3 in the givin number");
    }
}

这两个代码合并后应给出如下输出: 例如用户输入:127 输出: 128 140 141 142 144 145 147 148 150 151 152 154 。 。

我试图组合代码,但是我总是得到130、131 ...这是不受欢迎的输出。

2 个答案:

答案 0 :(得分:4)

设置一个带有禁止数字的查询表,然后根据数字检查数字的每个数字,而不管数字的大小。本质上,您的代码已经在做什么。

#include <stdbool.h>

bool has_forbidden_digit (unsigned int n)
{
  const bool FORBIDDEN [10] =
  {
    [3] = true,
    [6] = true,
    [9] = true,
  };

  do
  {
    if( FORBIDDEN[(n % 10)] )
    {
      return true;
    }
    n/=10;
  } while(n != 0);

  return false;
}

例如:

for(int i=0; i<100; i++)
{
  if(!has_forbidden_digit(i))
  {
    printf("%d\n", i);
  }
}

答案 1 :(得分:0)

您可以编写一个单独的函数,以检查数字是否包含一组目标数字中存在的数字。

这是一个演示程序。

#include <stdio.h>
#include <stdlib.h>

_Bool is_present( const unsigned int a[], size_t n, int value )
{
    const int Base = 10;

    _Bool present = 0;

    do
    {
        unsigned int digit = abs( value % Base );

        size_t i = 0;
        while ( i < n && digit != a[i] ) i++;

        present = i != n;
    } while ( !present && ( value /= Base ) );

    return present;
}

int main(void) 
{
    const size_t N = 20;
    const unsigned int a[] = { 3, 6, 9 };

    printf( "Enter a number: " );

    int value;

    scanf( "%d", &value );

    for ( size_t i = 0; i < N; ++value )
    {
        if ( !is_present( a, sizeof( a ) / sizeof( *a ), value ) )
        {
            printf( "%d ", value );
            ++i;
        }
    }

    putchar( '\n' );

    return 0;
}

其输出可能看起来像

Enter a number: 100
100 101 102 104 105 107 108 110 111 112 114 115 117 118 120 121 122 124 125 127

在这种情况下,您可以在main中指定任何一组禁止的数字。该函数不依赖于集合,因为集合是作为参数传递给函数的。