2013-05-01 78 views
-1

我想將二進制數轉換爲十進制。我的代碼片段:我怎樣才能獲得char值轉換爲int?

int main(){ 
    string count; 
    char number; 
    int counter; 
    int score = 0; 

    cout << "Wpisz liczbę w systemie binarnym" << endl; 
    cin >> count; 
    count << endl; 

    counter = count.length(); 

    for (int i = 0; i < counter; i++) 
    { 
     number = count[i]; 
     int aaa = (int) number - '0' // is that correct ? I think not. 
     score = aaa * pow(2,i) + score; 
    } 

    count <<wynik; 
    return 0; 
} 

但我PROGRAMM給人很奇怪的分數,例如:

輸入:100(十進制8) 輸出:1

輸入1000(十進制16) 輸出: 1

我不知道爲什麼。你可以幫我嗎 ?我認爲,那是char的問題?我真的嗎?

感謝,

對不起,我Englosh

+2

你應該爲你的縮進道歉太:-) – 2013-05-01 17:16:01

+0

這是非常有趣的:) – TN888 2013-05-01 17:18:23

+0

字符串'中的第一個字符「100」''是'1'',所以先分配給'wynik'在該循環是'1 * pow(2,0)+ 0'。 – dyp 2013-05-01 17:18:37

回答

1

試試這個:

int main(){ 
    string liczba; 
    int licznik; 
    int wynik = 0; 

    cout << "Wpisz liczb w systemie binarnym" << endl; 
    cin >> liczba; 

    licznik = liczba.length(); 

    for (int i = 0; i < licznik; i++) 
    { 
     int aaa = liczba[i] -'0'; // A bit hacky way to convert char to int 
     wynik += aaa * pow(2.0,licznik - i - 1); // Minus 1 to get the correct power 
    } 
    cout << wynik; 
    return 0; 
} 

不知道你來自哪裏,在你的代碼了count,但我相信你實際上意味着cout
有關char轉換的更多信息,請參閱this question

另外,正如其他人指出的,當從一個以0索引開始的字符串中讀取字符時,您將取出二進制數字,遞減的意義爲。這意味着你的指數應該減少,而不是增加。

編輯:我也注意到你的問題,你不正確讀取二進制:

輸入:100(十進制8)輸出:1
輸入1000(十進制16)輸出:1

100是4,而不是8.同樣,1000是8,而不是16.也許你忘了2^0或1的數字?

+0

現在我有非常奇怪的輸出:100 - 16,1100 - 80,1000 - 64。爲什麼? – TN888 2013-05-01 19:05:14

+0

嘗試用這個完全替換你原來的功能。這個算法應該工作。 – eriknelson 2013-05-01 19:10:34

+0

它的工作原理! ! ! ! ! ! ! ! ! – TN888 2013-05-01 19:34:00

1

另一種方法是擺脫包括從雙重投擲的戰俘。

int main(){ 
    string liczba; 
    int licznik; 
    int wynik = 0; 

    cout << "Wpisz liczb w systemie binarnym" << endl; 
    cin >> liczba; 

    licznik = liczba.length(); 

    for (int i = 0; i < licznik; i++) 
    { 
     int aaa = liczba[i] -'0'; // A bit hacky way to convert char to int 
     wynik *= 2; // shift existing total up a power of 2 (could use << 1) 
     wynik += aaa; // Add the next digit 
    } 
    cout << wynik; 
    return 0; 
} 
+0

+1 - 我故意讓我的答案接近建議的解決方案,但這是一個更優雅的方法。 – eriknelson 2013-05-02 18:52:36