本来这道题的话我两分钟写完,用了几句话可是提交了却发生了错误
详情如下,原因我猜是没有达到它的要求进行进制转换才不成功的
#include <iostream>
using namespace std;
int main()
{
int n,a[10],i;
cin>>n;
for(i=0;i<n;i++)
{
cin>>hex>>a[i];
}
for(i=0;i<n;i++)
{
cout<<oct<<a[i]<<endl;
}
return 0;
}
于是我看到了大佬写的代码,研究了半天,真的是又get到很多
#include<iostream>
#include <string>
using namespace std;
int main()
{
int n = 0; //记录输入数据的个数
cin >> n;
string sixteen[10]; //用来记录输入的数据
for(int i = 0;i < n;i++)
cin >> sixteen[i];
for( i = 0;i<n;i++)
{
string eight;//记录八进制数据
string sum; //记录二进制数据
char eig;
//转换为二进制
for(int j = 0;j < sixteen[i].length();j++)
{
switch(sixteen[i][j])
{
case '0':sum += "0000";break;
case '1':sum += "0001";break;
case '2':sum += "0010";break;
case '3':sum += "0011";break;
case '4':sum += "0100";break;
case '5':sum += "0101";break;
case '6':sum += "0110";break;
case '7':sum += "0111";break;
case '8':sum += "1000";break;
case '9':sum += "1001";break;
case 'A':sum += "1010";break;
case 'B':sum += "1011";break;
case 'C':sum += "1100";break;
case 'D':sum += "1101";break;
case 'E':sum += "1110";break;
case 'F':sum += "1111";break;
default:break;
}
}
int m = sum.length() % 3;//将不足3倍数的填充一下
if(m == 1)
sum.insert(0,"00");
else if(m == 2)
sum.insert(0,"0");
//进行转换
if(!(sum[0] == '0' && sum[1] == '0' && sum[2] == '0'))
{
eig = (sum[0] - '0') * 4 + (sum[1] - '0') * 2 + (sum[2]);
eight = eight + eig;
}
for(int k = 3;k < sum.length();k = k + 3)
{
if(sum.substr(k,3) == "000")//从下标为k开始截取长度为3位:sum = "000"
eight += "0";
else if(sum.substr(k,3) == "001")
eight += "1";
else if(sum.substr(k,3) == "010")
eight += "2";
else if(sum.substr(k,3) == "011")
eight += "3";
else if(sum.substr(k,3) == "100")
eight += "4";
else if(sum.substr(k,3) == "101")
eight += "5";
else if(sum.substr(k,3) == "110")
eight += "6";
else if(sum.substr(k,3) == "111")
eight += "7";
}
//输出最终的八进制数
cout <<eight<<endl;
}
return 0;
}