蓝桥杯 16进制转八进制

在这里插入图片描述
本来这道题的话我两分钟写完,用了几句话可是提交了却发生了错误
详情如下,原因我猜是没有达到它的要求进行进制转换才不成功的

#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;
}



作者原文还有另解,点击传送

发布了32 篇原创文章 · 获赞 4 · 访问量 2296

猜你喜欢

转载自blog.csdn.net/delete_bug/article/details/105421670