十六进制转八进制

来源:互联网 发布:淘宝咸鱼pc搜索工具 编辑:程序博客网 时间:2024/05/16 10:19

题目描述:

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

C++实现

#include<iostream>#include<cstring>using namespace std;int main(){int n;cin>>n;string hex[n];string bin[n];for(int i=0;i<n;i++)cin>>hex[i];for(int j=0;j<n;j++)for(int i=0;i<hex[j].length();i++){switch(hex[j][i]){    case '0':bin[j] += "0000";break;case '1':bin[j] += "0001";break;case '2':bin[j] += "0010";break;case '3':bin[j] += "0011";break;case '4':bin[j] += "0100";break;case '5':bin[j] += "0101";break;case '6':bin[j] += "0110";break;case '7':bin[j] += "0111";break;case '8':bin[j] += "1000";break;case '9':bin[j] += "1001";break;case 'a':case 'A':bin[j] += "1010";break;case 'b':case 'B':bin[j] += "1011";break;case 'c':case 'C':bin[j] += "1100";break;case 'd':case 'D':bin[j] += "1101";break;case 'e':case 'E':bin[j] += "1110";break;case 'f':case 'F':bin[j] += "1111";break;default :break;}}//修正位数for(int i=0;i<n;i++){if(bin[i].length()%3==1)bin[i]="00"+bin[i];if(bin[i].length()%3==2)bin[i]="0"+bin[i];}//输出八进制for(int j=0;j<n;j++){int flag = 0; for(int i=0;i<bin[j].length();i=i+3){int x=(bin[j][i]-'0')*4+(bin[j][i+1]-'0')*2+(bin[j][i+2]-'0');if(x!=0)flag=1;if(flag==1)cout<<x;}cout<<endl;}return 0;} 


0 0
原创粉丝点击