专栏首页开心的学习之路基础练习 十六进制转八进制

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

问题描述

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

输入格式

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

输出格式

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

注意

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

样例输入

2 39 123ABC

样例输出

71 4435274 思路:        如果先把十六进制转化成十进制,当十六进制数很大时,会溢出,若用字符串保存结果,那么转八进制会极其复杂。所以要先把十六进制转化成二进制,每四位十六进制数对应一个二进制数,再把二进制转化成八进制,每三个二进制数对应一个八进制数。

#include <iostream>
#include<cstdio> 
#include<algorithm>
#include <string>
using namespace std;

char s[100010];

void conversion(char s[])
{
    string temp;
    int t;
    for (int i=0; s[i]!='\0'; i++)
    {
        if (s[i] <= '9' && s[i] >= '0') 
	    t = s[i] - '0'; 
	else 
	    t = s[i] - 'A' + 10;
        string tem;
        while(t)                           //十六进制转二进制
        {
            tem += ((t & 1) + '0');
            t >>= 1;
        }
        if(!tem.length())
            tem = "0000";
        while(tem.length() < 4) 
	    tem += '0';
        reverse(tem.begin(), tem.end());
        temp += tem;
    }
    int i = 0;
    int len = temp.length();
    while(temp.length() % 3!=0)
    {
    	temp = '0' + temp;
    	len++;
    }
    string cur;
    while(i < len)
    {
        cur += temp[i];
        if(cur.length() == 3)
        {
            int kk = 0;
            for(int j = 0; j < 3; j++)
        	kk = kk * 2 + cur[j] - '0';
            cur.clear();
            if(kk == 0 && i == 2);               //八进制前导零不输出 
	    else
		cout << kk;	
        }
        i++;
    }
    cout << endl;
}
int main()
{
    int n;
    scanf("%d", &n);
    while(n--)
    {
	scanf("%s", s);
	conversion(s);
    }
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    输入格式   输入的第一行为一个正整数n (1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整...

    AI那点小事
  • 蓝桥杯 基础练习 十六进制转八进制

      输入的第一行为一个正整数n (1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数...

    Meng小羽
  • 基础练习 十六进制转十进制

      从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。   注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F...

    刘开心_1266679
  • 基础练习 十进制转十六进制

      十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的...

    刘开心_1266679
  • 蓝桥杯 基础练习 十六进制转十进制

      从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

    Meng小羽
  • 蓝桥杯 基础练习 十进制转十六进制

    十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至...

    Meng小羽
  • [javaSE] 进制转换(二进制十进制十六进制八进制)

    陶士涵
  • c++ 十六进制字符转换十进制_将二进制、八进制、十六进制转换为十进制

    9节课征服「字符编码」-1-字符、字符集、字符编号与字符编码(基础课)-周华健的在线视频教程​edu.csdn.net

    用户7886150
  • 二进制、八进制、十进制、十六进制相互转换

    方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。(具体用法如下图)

    赵哥窟
  • c++二进制转十进制_进制转换:二进制、八进制、十进制、十六进制相互转换

    二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。

    用户7886150
  • 八、十六进制数转换到十进制数

    0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100

    用户7886150
  • 【蓝桥杯】BASIC-12 十六进制转八进制

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 二进制与十六进制和八进制的快速转换

    乱码三千
  • 二、八、十、十六进制

    mwangblog
  • Python 二进制,十进制,十六进制转换

    使用 int() 函数 ,第一个参数是字符串 ‘0Xff’ ,第二个参数是说明,这个字符串是几进制的数。 转化的结果是一个十进制数。

    用户1148523
  • 十进制转十六进制(Java版)

    基础练习 十进制转十六进制 问题描述   十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,...

    张俊怡
  • java八进制数转十进制数_Java程序八进制数与十进制相互转换

    int octal = convertDecimalToOctal(decimal);

    用户7886150
  • PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    一,十进制(decimal system)转换函数说明  1,十进制转二进制 decbin() 函数,如下实例  echo decbin(12); //输出 ...

    joshua317
  • 用‘栈’的思想编写一个十进制转换二进制、八进制或十六进制的程序

    根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数,得到余数和商,此过程一直...

    跋扈洋

扫码关注云+社区

领取腾讯云代金券