48-十進制轉十六進制


      基礎練習 十進制轉十六進制  
時間限制:1.0s   內存限制:512.0MB
       
問題描述
  十六進制數是在程序設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進制數的0至15。十六進制的計數方法是滿16進1,所以十進制數16在十六進制中是10,而十進制的17在十六進制中是11,以此類推,十進制的30在十六進制中是1E。
  給出一個非負整數,將它表示成十六進制的形式。
輸入格式
  輸入包含一個非負整數a,表示要轉換的數。0<=a<=2147483647
輸出格式
  輸出這個整數的16進制表示
樣例輸入
30
樣例輸出
1E
 
#include <iostream> 
#include <cstdio>
#include <cstring>
using namespace std;
string str[16] = {"0000", "0001", "0010", "0011",
				  "0100", "0101", "0110", "0111",
				  "1000", "1001", "1010", "1011",
				  "1100", "1101", "1110", "1111"};

int main(){
	string s0, s1;
	long long a; 
	cin >> a;
	if(a == 0){  
		printf("0\n");		
	}
	else
		while(a){
			s0 += (a % 2 + '0');    //a的二進制存入s0 
			a /= 2;
			if(a == 1){
				s0 += '1';    
				break;
			}
		}
	int len = s0.length();
	if(len % 4 != 0){              //將a的二進制補齊,最后四個一個合並成十六進制 
		for(int i = 0; i < 4 - (len % 4); i++)
			s0 += '0';
		len += (4 - (len % 4));
	}
	for(int i = 0; i < len; i += 4){ //合並成十六進制 
		int sum = 0;
		int k = 1;
		for(int j = i; j < i + 4; j++){
			sum += (s0[j] - '0') * k;
			k *= 2;
		}
		if(sum < 10){
			s1 += (sum + '0');
		}
		else{
			s1 += ((sum - 10) + 'A');
		}
	}
	for(int i = s1.length() - 1; i >= 0; i--)
		cout << s1[i];
//	cout << s0 << endl;
//	cout << s1 << endl;
	return 0;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM