基础练习 十六进制转八进制

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

  • 本题需注意16进制数的长度不超过100000,那么测试数据就有可能超过int和long long 型所表示数据的范围。
  • 3个二进制数转换为一位8进制数
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n,l;
    bool flag;
    cin>>n;
    string str;
    while(n--)
    {
        flag=0;
        string s;
        cin>>str;
        for(int i=0;i<str.length();i++)
        {
            switch(str[i])
            {
                case '0':s+="0000";break;
                case '1':s+="0001";break;
                case '2':s+="0010";break;
                case '3':s+="0011";break;
                case '4':s+="0100";break;
                case '5':s+="0101";break;
                case '6':s+="0110";break;
                case '7':s+="0111";break;
                case '8':s+="1000";break;
                case '9':s+="1001";break;
                case 'A':s+="1010";break;
                case 'B':s+="1011";break;
                case 'C':s+="1100";break;
                case 'D':s+="1101";break;
                case 'E':s+="1110";break;
                case 'F':s+="1111";break;
            }
        }
        if(s.length()%3==1)
        {
            s="00"+s;
        }
        if(s.length()%3==2)
        {
            s='0'+s;
        }
        for(int i=0;i<s.length();i+=3)
        {
            l=4*(s[i]-'0')+2*(s[i+1]-'0')+(s[i+2]-'0');
            if(l!=0)
            {
                flag=1;
            }
            if(flag)
            cout<<l;
        }
        cout<<endl;
    }
    return 0;
 } 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题描述给定n个十六进制正整数,输出它们对应的八进制数。 输入格式输入的第一行为一个正整数n (1<=n<=10)...
    就这样吧嘞阅读 3,938评论 0 1
  • 题目要求 输入的第一行为一个正整数n (1<=n<=10)。接下来n行,每行一个由09、大写字母AF组成的字符串,...
    嘉敏的豆子阅读 4,829评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,949评论 0 5
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,773评论 0 2
  • 在心理层面,成就感和荣誉感会影响孩子内在观念的形成。 内在观念会影响价值感。 正面观念,多价值感就高。 负面观念多...
    恬淡罗罗阅读 2,405评论 0 0