-1

如果我们在 int long 中有经典的十进制格式,我们可以这样做:

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中的二进制表示八进制表示呢?我们有:

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

要检查一个数字是否是有效的二进制数字,请将其与 进行比较1

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

正如@Pubby 所指出的,你有一个八进制数而不是一个十进制数,所以使用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 回答