zoukankan      html  css  js  c++  java
  • 进制转换(2~16进制)


    参考https://blog.csdn.net/zhang__shuang_/article/details/86578800

    例题

    题目描述: 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

    输入描述: 输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。 数据可能存在包含前导零的情况。

    输出描述: 可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

    输入 15 Aab3 7

    输出 210306

    思路:

    是将任意进制数转换为十进制数,再由十进制数转换为任意进制数,不要忘记输出是A~F的特别处理。

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int main()
    {
        int m, n;
        string c;
        long long num=0;
        cin >> m >> c >> n;
        for (int i = 0; i < c.length(); i++)
        {
            if (islower(c[i]))  num += (c[i] - 'a' + 10) * pow(m, c.length() - 1 - i); //如果是字母的话就+10,因为a代表10
            else if (isupper(c[i])) num += (c[i] - 'A' + 10)*pow(m, c.length() - 1 - i);
            else if (isdigit(c[i]))num += (c[i] - '0')*pow(m, c.length() - 1 - i);//如果是数字就直接乘
        }
        int out[100];
        int s = 0;
        while (num > 0)
        {
            out[s++] = num%n;
            num /= n;
        }
        if (n <= 9)//将变为的进制<=9
        {
            for (int i = s - 1; i >= 0; i--)
                cout << out[i];
        }
        else
        {
            for (int i = s - 1; i >= 0; i--)
            {
                if (out[i] >= 10)cout << (out[i] - 10 + 'A');
                else cout << out[i];
            }
        }
    }
  • 相关阅读:
    Oracle11g 修改内存配置
    七.从按键输入到GPIO通用驱动
    三.C语言版本的LED驱动试验
    五.NXP恩智浦官方SDK使用
    前期准备——1.Makefile的使用及基本语法
    八.主频及时钟配置
    四.指针形式对寄存器进行操作(类似STM32效果)
    二.I.MX6U的启动方式
    六.蜂鸣器驱动
    六.项目的BSP工程管理
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12788816.html
Copyright © 2011-2022 走看看