ブルーブリッジカップ試験問題基礎練習10進数回転16進数


十進数転十六進数問題記述十六進数は、プログラム設計時によく用いられる整数の表現である.0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの16シンボルで,それぞれ10進数の0から15を表す.16進数のカウント方法は満16進1であるため、10進数16は16進数で10であり、10進数の17は16進数で11であり、このように10進数の30は16進数で1 Eである.非負の整数を与え、16進数の形式で表す.入力フォーマット入力には、変換する数を表す非負の整数aが含まれます.0<=a<=21748483647出力フォーマットこの整数を出力する16進数表示サンプル入力30サンプル出力1 E方法1:10進数直接16進数回転.10進数を16で割って余求商を求め、得られた商を新たな除数として16で割って余求商を求める...商が0になるまで循環する.
#include 
#define MAX 10000
using namespace std;
int main(){
	unsigned int a;
	cin>>a;
	if(a==0){   // a 0,          0,       
		cout<<0<<endl;
		return 0;
	} 
	int quo,mod,len=0; //quo  ,mod   ,len          
	char arr[MAX]={0};
	char c;
	while(a){   // a  0 ,     
		quo=a/16;
		mod=a%16;
		a=quo;
		if(mod>9){  // mod: 10~15
			c=(mod-10)+'A'; // tmp     :'A'~'F' 
			//                
			arr[len++]=c;   //   arr[len]=c,  len 1 
		}
		else{
			c=mod+'0';   // tmp     :'0'~'9' 
			arr[len++]=c;
		}
	}
	for(int i=len-1;i>=0;i--){//       
		cout<<arr[i];
	}
	cout<<endl;
	return 0;
} 

方法2:10進数をバイナリに変換し、16進数に変換する
#include 
using namespace std;
void docToHex(int arr[],unsigned int a);//    :         
int main(){
	unsigned int a;
	cin>>a;
	int arr[32];
	docToHex(arr,a); //     
	return 0;
}
void docToHex(int arr[],unsigned int a){
	if(a==0){
		cout<<0<<endl;
		return;
	}   
	int i,j,tmp;
	int len;
	long int sum=0;;
	j=0;
	for(i=32-1;i>=0;i--){
		arr[i]=a&1; //    a     1 “ ”  ,  9&1   :1001 & 0001 = 1
		a=a>>1;// a           ,  :1001      100,        
	}
	int index;
	for(index=0;index<32;index++){
		if(arr[index]!=0)
		break;
	}
	int start=(32-index)%4;  //start          ,  : 0~3, 
	if(start==1){
		cout<<arr[index]*1;
	}
	else if(start==2){
		cout<<arr[index]*2 + arr[index+1]*1;
	}
	else if(start==3){
		cout<<arr[index]*4 + arr[index+1]*2 + arr[index+2]*1;
	}
	for(int i=index+start;i<32-3;i+=4){
		char c;
		// tmp    4               ,  1110         14 
		int tmp=arr[i]*8 +arr[i+1]*4 + arr[i+2]*2 + arr[i+3]*1;
		//             
		if(tmp>9)  {  // tmp: 10~15
			c=(tmp-10)+'A'; // tmp     :'A'~'F' 
			cout<<c;
		}
		else{
			c=tmp+'0';   // tmp     :'0'~'9' 
			cout<<c;
		}
	}
	cout<<endl;
}