c++ 给定n个十六进制正整数,输出它们对应的八进制数。

阅读: 评论:0

c++ 给定n个十六进制正整数,输出它们对应的八进制数。

c++ 给定n个十六进制正整数,输出它们对应的八进制数。

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

思路:
1.先将十六进制数转换成二进制数,每一位十六进制转换成四位二进制。
2.再由二进制数转换成八进制,每三位二进制转换为一位八进制

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
using namespace std;int main()
{int n;//输入n个十六进制int str_length;cin>>n;string in_str[n];//输入十六进制字符串string out_str[n];//输出八进制字符串string str;string binarystr;//中间代换,存二进制string octstr;//中间代换,存八进制for(int i=0; i<n; i++)接收十六进制字符串{cin>>in_str[i];}for(int i=0; i<n; i++)//{binarystr="";str = in_str[i];str_length = str.length();for(int j=0; j<str_length; j++)//十六进制转换为二进制{switch(str[j]){case '0':binarystr+="0000";break;case '1':binarystr+="0001";break;case '2':binarystr+="0010";break;case '3':binarystr+="0011";break;case '4':binarystr+="0100";break;case '5':binarystr+="0101";break;case '6':binarystr+="0110";break;case '7':binarystr+="0111";break;case '8':binarystr+="1000";break;case '9':binarystr+="1001";break;case 'A':binarystr+="1010";break;case 'B':binarystr+="1011";break;case 'C':binarystr+="1100";break;case 'D':binarystr+="1101";break;case 'E':binarystr+="1110";break;case 'F':binarystr+="1111";break;default:break;}}str_length =binarystr.length();if(str_length%3==1) //补零,三个二进制转换为一个八进制binarystr = "00" + binarystr;if(str_length%3==2)binarystr = "0" + binarystr;str_length =binarystr.length();octstr ="";int t;for(int j=0; j<str_length; j+=3)//二进制转换为八进制{t = (binarystr[j]-'0')*4 + (binarystr[j+1]-'0')*2 + (binarystr[j+2]-'0')*1;//int类型转换成string类型/*//方法一switch(t){case 0:octstr += '0';break;case 1:octstr += '1';break;case 2:octstr += '2';break;case 3:octstr += '3';break;case 4:octstr += '4';break;case 5:octstr += '5';break;case 6:octstr += '6';break;case 7:octstr += '7';break;default:break;}*///方法二stringstream ss;ss << t;        //int类型转换成string类型octstr += ss.str();}for(int j=0; j<3; j++)if(octstr[0]=='0') octstr&#ase(0,1); //删除为0的首字符out_str[i] = octstr;//传给输出变量}for(int i=0; i<n; i++)cout<<out_str[i]<<endl;return 0;
}

本文发布于:2024-01-28 23:55:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645730511217.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23