八進制轉十六進制


Input

第一行為一個整數 T ,表示數據的組數

一下T行 每行一個八進制數字串s

 

Output

對於每組數據輸出對應的十六進制字串

 

 

Sample Input

4
7
77
233
2333333333333333333

 

Sample Output

7
3F
9B
9B6DB6DB6DB6DB
 
代碼:

#include<iostream>
#include<string>
using namespace std;
char x(int n){
  if(n<=9)
    return n+'0';
  switch(n){
    case 10:return 'A';
    case 11:return 'B';
    case 12:return 'C';
    case 13:return 'D';
    case 14:return 'E';
    case 15:return 'F';
  }
}
int main(){
  int t,i,num,n1,n2,n3,j,k;
  string str;
  char str1[10000];
  cin>>t;
  while(t--){
    str.clear();
    j=0;
    cin>>str;
    i=str.size()-1;
    for(;i>3;i-=4){
      num=str[i]-'0'+(str[i-1]-'0')*8+(str[i-2]-'0')*64+(str[i-3]-'0')*512;
      n1=0,n2=0,n3=0;
      while(num>0){
        if(num>=16*16){
          num-=16*16;
          n1++;
        }
        else if(num>=16){
          num-=16;
          n2++;
        }
        else{
          n3=num;
          break;
        }
      }
      str1[j++]=x(n3);
      str1[j++]=x(n2);
      str1[j++]=x(n1);
    }
    num=0,n1=0,n2=0,n3=0;
    for(k=0;k<=i;++k)
      num=num*8+str[k]-'0';
    while(num>0){
      if(num>=16*16){
        num-=16*16;
        n1++;}
      else if(num>=16){
        num-=16;
        n2++;}
      else{
        n3=num;
        break;}
    }
    str1[j++]=x(n3);
    str1[j++]=x(n2);
    str1[j++]=x(n1);
    if(n1==0){
      j--;
      if(n2==0)
        j--;
    }
    while(--j)
      cout<<str1[j];
    cout<<str1[j]<<endl;

  }

  return 0;
}


免責聲明!

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



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