1. 程式人生 > >九度-題目1138:進制轉換

九度-題目1138:進制轉換

i++ 十進制 ring str 進制數 ble for 進制 進制轉換

http://ac.jobdu.com/problem.php?pid=1138

題目描述:

將一個長度最多為30位數字的十進制非負整數轉換為二進制數輸出。

輸入:

多組數據,每行為一個長度不超過30位的十進制非負整數。
(註意是10進制數字的個數可能有30個,而非30bits的整數)

輸出:

每行輸出對應的二進制數。

樣例輸入:
0
1
3
8
樣例輸出:
0
1
11
1000
來源:
2008年北京大學軟件所計算機研究生機試真題
十進制轉化二進制最基本的還是除二取余法。這裏只是將數字已字符串形式給出,核心的算法是沒有改變的。
#include <iostream>
#include <string
.h> #include <cstring> char binvec[1001]; using namespace std; void decTobin(string str){ int size=0; int len = str.size(); int sum=1; // 初始化sum不為0即可 while(sum){ sum=0; for(int i=0; i<len; i++) { int tmp=(str[i]-0)/2; //一個數除以2就是每個位除以2 sum+=tmp; //
當這個數每個位全為0的時候,sum==0 if(i==len-1){ binvec[size++]=(str[i]-0) % 2+ 0; } else{ str[i+1]=str[i+1]+(str[i]-0)%2*10; } str[i]=tmp+0; } } } void reverse_out(){ //cout << binvec << endl;
for(int i=strlen(binvec)-1; i>=0; i--){ cout << binvec[i] ; } cout << endl; } int main() { string str; while(cin>>str){ memset(binvec, \0, sizeof(binvec)); decTobin(str); reverse_out(); } return 0; }

九度-題目1138:進制轉換