ブルーブリッジカップ試験問題基礎練習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になるまで循環する.
方法2:10進数をバイナリに変換し、16進数に変換する
#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;
}