2012-11-25 22 views
-1

如果我們在INT古典十進制格式長,我們可以做這樣的事情:如何在二進制表示中找到long int中的數字? C++

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長代表八? 我們:

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長只包含0或1。 什麼是最簡單的方法來檢查正確的輸入?也許只是一個簡單的問題,但不知道,謝謝。

+4

'01011111'是八進制。 – Pubby

+0

目前還不清楚你想要什麼。 你想檢查一個數字'x'的十進制表示只包含1和0嗎?因爲如果你用二進制表示,它的定義將會有... – jcoder

+0

@ J99我認爲他有一個由1和0組成的數字,雖然它是一個小數,但實際上是一個二進制數。然後他想驗證數字只是1/0 ......爲什麼我不知道! – Caribou

回答

1

要檢查一個數字是否是一個有效的二進制數字,它與1比較:

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

正如@Pubby指出,你有一個八進制數字,而不是十進制數,所以使用8代替10計算位數:

thisDigit = thisNumber % 8;  
thisNumber = thisNumber/8;  
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"; 
} 
+0

Thas不清楚解決方案,試着檢查'int number1 = 0001001;'並且不起作用。 ;)導致八進制。 – RePRO

+0

那麼不要那麼做!要說清楚,我的意思是可以做些什麼呢?你必須知道一些C++使用的語言,如果你想輸入一個像這樣的數字不使用八進制:P – jcoder

+0

但這是正確的:'int number1 = 0001001',原因包含0或1. – RePRO

0

我的解決方案。這很簡單。

bool check(int long number) 
    { 
    return ((number % 10 != 0) && (number % 10) != 1); 
    } 
+0

您只能檢查該數字的最後一個(基數爲10)的數字,否則不可重複使用。這真的是你最終的解決方案嗎? – moooeeeep

相關問題