題目在 https://zerojudge.tw/ShowProblem?problemid=a034
這題不難, 就是在做十進位數字轉成二進位數字, 看了一下其他人寫的解題思路, 感覺大家都是用純軟體或是說純數學的方法在解題. 好像沒有人用硬體的思路來解題? 為什麼這麼說呢? 因為電腦本來就是二進位的機器, 它是為了讓人看懂才把二進位轉成十進位給人看的. 現在十進位要轉成二進位, 根本也不需要轉什麼, 就把電腦內部的真實二進位數字用0和1印出來就行了.
但是還是為了符合人類懶惰的書寫習慣, 二進位數字前的0要去掉, 所以我還是加了一個flag來判斷前面的0要不要印出來.
我也不用什麼模數或是2的指數,遞迴呼叫這種耗費資源的寫法. 我用移位和位元運算這種硬體指令極快的方式就可以了.
完整程式如下.
#include <iostream>
using namespace std;
int main() {
unsigned int decimalNum;
while ((cin >> decimalNum) && !cin.eof()) {
unsigned int bit1 = 0x80000000;
bool output=false;
while (bit1 > 0) {
int b = decimalNum & bit1;
if(b){
output=true;
cout << 1;
}else{
if(output)
cout << 0;
}
bit1 >>= 1;
}
cout << endl;
}
return 0;
}
C++