该代码应该接受用户输入的任何数字,并显示接下来的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 ...这是不受欢迎的输出。
答案 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中指定任何一组禁止的数字。该函数不依赖于集合,因为集合是作为参数传递给函数的。