1. 程式人生 > >水題T,二進位制轉16進位制

水題T,二進位制轉16進位制

輸入一個2進位制的數,要求輸出該2進位制數的16進製表示。 
在16進位制的表示中,A-F表示10-15 
Input第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個以0和1組成的字串,字串長度至少是1,至多是10000Outputn行,每行輸出對應一個輸入。Sample Input

2
100000
111

Sample Output

20
7

2進位制轉換成16進位制。
從後面開始,每四位換成一個數,0123456789ABCDEF,不足4位在前面用0補上。

程式一直出問題,因為定義的是char型的陣列,所以操作的時候必須用'0' 'A'等等。
#include <bits/stdc++.h>
using namespace std;
char s1[10005];
char convert[] = "0123456789ABCDEF";


int main(){
	int n; 
	cin>>n;
	getchar();
	while(n--){
		char s3[10000]={0};//存放結果
		gets(s1+4);
		s1[0] = s1[1] = s1[2] = s1[3] = '0';  //令前四位為0
		int len1 = strlen(s1);
		int m = 4;
		if(len1%4) m = len1%4; 
		

		int j = 0;
		for(int i = m; i < len1; i+=4) 
		{
			s3[j] = convert[(s1[i]-'0')*8 + (s1[i+1]-'0')*4 + (s1[i+2]-'0')*2 + (s1[i+3]-'0')];

			j++;
		}
		cout<<s3<<endl;
	}
	return 0;
}