-1

int long の従来の10 進形式の場合、次のようなことができます。

const long int NUMBER = 4577;         
const long int DIGIT_TO_FIND = 5;

long int thisNumber = NUMBER >= 0 ? NUMBER : -NUMBER; 
long int thisDigit;

while (thisNumber != 0)
{
    thisDigit = thisNumber % 10;    
    thisNumber = thisNumber / 10;    
    if (thisDigit == DIGIT_TO_FIND)
    {
        printf("%d contains digit %d", NUMBER, DIGIT_TO_FIND);
        break;
    }
}

しかし、int longで表現する 2 進数または8進数はどうでしょうか。我々は持っています:

const long int NUMBER = 01011111; // octal
const long int DIGIT_TO_FIND1 = 0;         
const long int DIGIT_TO_FIND2 = 1;

正しい入力:

01010101
11111111

不正な入力:

02010101 (because two)
00000009 (because nine)

int long に 0 または 1 のみが含まれているかどうかを確認する必要があります。そのための正しい入力を確認する最も簡単な方法は何ですか? 簡単な質問かもしれませんが、わかりません。ありがとうございます。

4

3 に答える 3

1

数字が有効な 2 進数かどうかを確認するには、次のように比較し1ます。

if (thisDigit > 1)
{
    printf("%d contains digit %d", NUMBER, thisDigit);
    break;
}

@Pubby で指摘されているように、10 進数の代わりに 8 進数があるため、8代わりに使用10して数字を計算します。

thisDigit = thisNumber % 8;    
thisNumber = thisNumber / 8;    
于 2012-11-25T18:11:26.970 に答える
1

私があなたの質問をこのように理解していれば-

#include <iostream>

bool check(int number, int search_1, int search_2)
{
    while(number > 0)
    {
        int digit = number % 10;
        number    = number / 10;
        if (digit != search_1 && digit != search_2)
            return false;
    }
    return true;
}

int main()
{
    const int DIGIT_TO_FIND1 = 0;
    const int DIGIT_TO_FIND2 = 1;

    int number1 = 1001001;
    std::cout << "Checking " << number1 << " : " << check(number1, DIGIT_TO_FIND1, DIGIT_TO_FIND2) <<" \n";

    int number2 = 12110101;
    std::cout << "Checking " << number2 << " : " << check(number2, DIGIT_TO_FIND1, DIGIT_TO_FIND2) <<" \n";
}
于 2012-11-25T18:12:16.053 に答える
0

私の解決策。それは本当に簡単です。

   bool check(int long number)
   {
     return ((number % 10 != 0) && (number % 10) != 1);
   }
于 2012-11-25T19:16:48.083 に答える