码迷,mamicode.com
首页 > 其他好文 > 详细

八进制转十六进制

时间:2017-05-31 20:52:05      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:str1   main   char   nbsp   turn   include   std   bsp   roman   

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;
}

八进制转十六进制

标签:str1   main   char   nbsp   turn   include   std   bsp   roman   

原文地址:http://www.cnblogs.com/xuyt/p/6925732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!