將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。
多組資料,每行為乙個長度不超過30位的十進位製非負整數。
(注意是10進製數字的個數可能有30個,而非30bits的整數)
每行輸出對應的二進位制數。
此題為大數轉換問題,通過模擬手工計算過程來實現。清華大學的考研複試機試經常為考察大整數問題,通常使用string來儲存大數,然後模擬手工計算過程。
這個問題比較簡單,只是將十進位制轉化為二進位制。使用string來儲存十進位制整數,然後模擬手工計算過程,從第一位開始依次除以2。使用乙個臨時變數來儲存餘數,商直接寫入儲存輸入的string中,直到計算到最後乙個數字,這時將最後的餘數存入結果string中,就計算出了第乙個二進位制數字。
按照上述方法依次迴圈計算出各個位的二進位制數字,迴圈結束的條件是最初儲存輸入的string所有位都為0,這時因為我們把每一步計算出的商,直接寫回原string的緣故。在儲存結果的時候,可以將每一步計算出的二進位制位插入到string的前端,這樣最後可以直接輸出。也可以每次都插入string的結尾處,最後不要忘記從最後一位開始往前輸出。
#include
#include
using namespace std;
intmain
(void);
int bit[
100]=;
//同理結果也使用陣列儲存
while
(cin >> str)
int index =0;
//結果下標
while
(true)
if(j == length)
//模擬手工計算過程
for(
int i = j; i < length;
++i)
bit[index++
]= left;
//儲存結果
}//輸入為0的情況
if(index ==0)
else
} cout << endl;
}return0;
}
清華大學考研複試機試 進製轉換2
將m進製的數x轉換為n進製的數輸出。輸入的第一行包括兩個整數 m和n 2 m,n 36 下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。輸出x的n進製表示的數。10 2 111011輸入時如有字母,則字母為大寫,輸出時如有字母,則字母為小寫。這道題其實和10進製...
清華大學考研複試機試 abc
設a b c均是0到9之間的數字,abc bcc是兩個三位數,且有 abc bcc 532。求滿足條件的所有a b c的值。題目沒有任何輸入。請輸出所有滿足題目條件的a b c的值。a b c之間用空格隔開。每個輸出佔一行。水題,直接遍歷暴力求解即可,三層for迴圈。不過也有一些優化的點,可能優化效...
清華大學考研複試機試 root N,k
n 2000000000 每組測試資料報括一行,x 0輸入可能有多組資料,對於每一組資料,root x y,k 的值 4 4 104這道題乍一看好像沒有什麼思路,那就先暴力求解試試。不過不管你用pow函式,還是用快速冪運算,都過不了,因為結果已經爆long long int。有關快速冪運算這裡簡單提...