64,666
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n, len, len_2, i,j;
string str1, str2 ;
cin >> n;//输入n个十六进制数
while (n--)
{
cin >> str1;
len = str1.length();
str2 = " ";
for (i = 0; i < len; i++)//十六进制转化为二进制
{
switch (str1[i])
{
case'0':str2 += "0000"; break;
case'1':str2 += "0001"; break;
case'2':str2 += "0010"; break;
case'3':str2 += "0011"; break;
case'4':str2 += "0100"; break;
case'5':str2 += "0101"; break;
case'6':str2 += "0110"; break;
case'7':str2 += "0111"; break;
case'8':str2 += "1000"; break;
case'9':str2 += "1001"; break;
case'A':str2 += "1010"; break;
case'B':str2 += "1011"; break;
case'C':str2 += "1100"; break;
case'D':str2 += "1101"; break;
case'F':str2 += "1110"; break;
case'E':str2 += "1111"; break;
}
}
//二进制转化为八进制是需要补位成3的倍数
len_2 = str2.length();
if (len_2 % 3 == 1)
str2 = "00"+str2;
else if (len_2 % 3 == 2)
{
str2 = "0"+str2;
}
cout << str2;//此处输出最左边没有显示补上的0,,只是空出了空格,是怎么回事???
len_2 = str2.length();
//二进制转化成八进制
for (i = 0; i < len_2; i++)
{
cout <<( (str2[i++] - '0') * 4 + (str2[i++] - '0') * 2 + (str2[i] - '0'));
}
cout<<endl;
}
system("pause");
return 0;
}