蓝桥杯练习试题——十六进制转换成八进制

来源:互联网 发布:考试通软件 编辑:程序博客网 时间:2024/06/05 09:51



#include <iostream>

#include <string>

using namespace std;


int main()

{

   int n =0, i =0, j =0, temp =0, nNum =0;

   char ch;

   string strHex[10];

   string strBin[10];

   string strOct[10];


    

   cin>>n;

    

    //输入十六进制

   for (i =0; i < n; ++i)

    {

       cin>>strHex[i];

    }

    

    //十六进制转二进制

   for (i =0; i < n; ++i)

    {

        j =0;

       while (strHex[i][j])

        {

           switch(strHex[i][j])

            {

               case'0': strBin[i] +="0000";break;

               case'1': strBin[i] +="0001";break;

               case'2': strBin[i] +="0010";break;

               case'3': strBin[i] +="0011";break;

               case'4': strBin[i] +="0100";break;

               case'5': strBin[i] +="0101";break;

               case'6': strBin[i] +="0110";break;

               case'7': strBin[i] +="0111";break;

               case'8': strBin[i] +="1000";break;

               case'9': strBin[i] +="1001";break;

               case'A': strBin[i] +="1010";break;

               case'B': strBin[i] +="1011";break;

               case'C': strBin[i] +="1100";break;

               case'D': strBin[i] +="1101";break;

               case'E': strBin[i] +="1110";break;

               case'F': strBin[i] +="1111";break;

               default:break;

            }

            ++j;

        }

    }

    

    //二进制转化为八进制

   for (i =0; i < n; ++i)

    {

        j = strBin[i].size()-1;//获得长度

        

       while (strBin[i][j] && j>=0)

        {

            temp =3;

            nNum =0;

           while (temp-- && j>=0)

            {

               if ('1' == strBin[i][j])

                {

                   switch(temp)

                    {

                       case0: nNum +=4;break;

                       case1: nNum +=2;break;

                       case2: nNum +=1;break;

                       default:break;

                    }

                }

                --j;

            }

            strOct[i] += (nNum+'0');   //最后都加'0'字符

        }

    }

    

    

    //eg:0100 0101 ——> 应该输出为01 000 101.但是上式用101 000 01.

    

    //字符串逆序

   for (i =0; i < n; ++i)

    {

        temp = strOct[i].size()-1;

       for (j =0; j <= temp/2; ++j)

        {

            ch = strOct[i][j];

            strOct[i][j] = strOct[i][temp-j];

            strOct[i][temp-j] = ch;

        }

    }

    

   //打印

   for (i =0; i < n; ++i)

    {

        j =0;

       while (strOct[i][j++] =='0');//跳过前面的0

        

       for(--j; j < strOct[i].size(); ++j)

        {

           cout<<strOct[i][j]-'0';

        }

        /*if (i != n-1)*/

       cout<<endl;

    }

    

   return0;

}

0 0
原创粉丝点击