題目描述:
將一個長度超過100位數字的十進制非負整數轉換為二進制數輸出。
輸入:
多組數據,每行為一個長度不超過30位的十進制非負整數。
(注意是10進制數字的個數可能有30個,而非30bits的整數)
輸出:
每行輸出對應的二進制數。
樣例輸入:
0
1
3
8樣例輸出:
0
1
11
1000分析:這個數不應該存儲到一個int類型變量裡面去,同樣和前幾篇帖子一樣,也是用向量來處理,處理出的結果用binary存儲,最後輸出就是我們要的結果
C++代碼如下:
[cpp]
// w397090770
// [email protected]
// 2012.07.14
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//convert decimal to Binary
void dec2bin(string s){
int sum(0);
vector<char>v;
int i, j;
string binary;
char ch;
//把每一位存到v裡面去
for(int i(s.length() - 1); i >= 0; --i){
v.insert(v.begin(), s[i] - '0');
}
//計算二進制
while(1){
j = v.size() - 1;
ch = v[j] % 2 + '0';
binary.insert(binary.begin(), 1, ch);
for(sum = 0, i = 0; i <= j; i++){
if(i < j){
//v[i + 1] += (v[i] % 2) * 10;
v[i + 1] += (v[i] - ((v[i] >> 1) << 1)) * 10;
}
//v[i] /= 2;
v[i] >>= 1;
sum += v[i];
}
if(sum == 0){
break;
}
}
cout<< binary <<endl;
}
int main(){
string dec;
while(cin>>dec){
dec2bin(dec);
}
return 0;
}
// w397090770
// [email protected]
// 2012.07.14
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//convert decimal to Binary
void dec2bin(string s){
int sum(0);
vector<char>v;
int i, j;
string binary;
char ch;
//把每一位存到v裡面去
for(int i(s.length() - 1); i >= 0; --i){
v.insert(v.begin(), s[i] - '0');
}
//計算二進制
while(1){
j = v.size() - 1;
ch = v[j] % 2 + '0';
binary.insert(binary.begin(), 1, ch);
for(sum = 0, i = 0; i <= j; i++){
if(i < j){
//v[i + 1] += (v[i] % 2) * 10;
v[i + 1] += (v[i] - ((v[i] >> 1) << 1)) * 10;
}
//v[i] /= 2;
v[i] >>= 1;
sum += v[i];
}
if(sum == 0){
break;
}
}
cout<< binary <<endl;
}
int main(){
string dec;
while(cin>>dec){
dec2bin(dec);
}
return 0;
}
運行結果:
我在網上搜索了一下,看到有人用java寫了一個版本,函數很簡單:如下:
[java]
import java.math.BigInteger;
import java.util.Scanner;
public class Q1138 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
System.out.println(new BigInteger(cin.next()).toString(2));
}
}
}
import java.math.BigInteger;
import java.util.Scanner;
public class Q1138 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
System.out.println(new BigInteger(cin.next()).toString(2));
}
}
}結果:
從上面看出,java語言的確很方便,很強大,但是java代碼運行時間明顯要比C++實現的要長。
作者:w397090770