基础练习 十六进制转八进制

来源:互联网 发布:网络歌手雷婷个人资料 编辑:程序博客网 时间:2024/05/22 06:04
 基础练习 十六进制转八进制  
时间限制:1.0s   内存限制:512.0MB
      
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include<iostream>#include<string>using namespace std;int main(){int n,i,j;string x,b;cin>>n;for(i=0;i<n;i++){cin>>x;b="";//对b初始化for(j=0;j<x.length();j++)//十六进制转换二进制{switch(x[j]){case '0':b+="0000";break;case '1':b+="0001";break;case '2':b+="0010";break;case '3':b+="0011";break;case '4':b+="0100";break;case '5':b+="0101";break;case '6':b+="0110";break;case '7':b+="0111";break;case '8':b+="1000";break;case '9':b+="1001";break;case 'A':b+="1010";break;case 'B':b+="1011";break;case 'C':b+="1100";break;case 'D':b+="1101";break;case 'E':b+="1110";break;case 'F':b+="1111";break;default:break;}}//转换结束int len=b.length();int sum,flag=0;if(len%3==1)b="00"+b;else if(len%3==2)b="0"+b;for(j=0;j<b.length();j=j+3){sum=(b[j]-'0')*4+(b[j+1]-'0')*2+(b[j+2]-'0');if(sum)flag=1;if(flag)cout<<sum;}cout<<endl;}return 0;}

原创粉丝点击