【每日一题】进制转换

进制转换

本题链接
题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:

输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。

输出描述:

为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)

示例1
输入

7 2

输出

111

【题意解析】
本题题目很简单,题目的本意就是将10进制的数转换成N进制。N(2 ≤ N ≤ 16)可以看出进制最多可以到16进制。
【解题思路】
首先我们要明白进制转化的原理,由十进制转化成N进制,十进制数除N取余法,即十进制数除N,余数为权位上的数,得到的商值继续除N,依此步骤继续向下运算直到商为0为止。
在这里插入图片描述
在这里插入图片描述
2.当数据为负数时,需要特殊处理,用flag进行标记,将其先按照正数处理
3.明白其原理,其次就是对于数据的保存,通过table数组将进制转换可能会出现的值进行存储"0123456789ABCDEF",通过哈希映射的思想,将取余所得值对照存入字符串str中,然后再将数据整除进制数进行循环,当数据存入str完成后,通过flag进行判断,若为负数,再将‘-’存入str中。
4.按照其进制转换规则,则需将str中的字符进行逆置,然后得到转换的相应结果。
【代码实现】

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    int m,n;
    cin>>m>>n;
    string str;//保存结果
    string table = "0123456789ABCDEF";//哈希映射表
    bool flag = false;//判断正负
    if(m < 0)
    {
        m = 0 - m;
        flag = true;
    }
    while(m)
    {
        str += table[m % n];
        m = m / n;
    }
    if(flag)//负数
    {
        str += '-';
        flag = false;
    }
    reverse(str.begin(),str.end());
    cout<<str<<endl;
    return 0;
}

【本题难点】
1.考察了进制转换的基本方法
2.table字符串采用了哈希映射的思想
3.算法库#include<algorithm>以及逆置字符串算法reverse(str.begin(),str.end());的使用。

发布了29 篇原创文章 · 获赞 66 · 访问量 5863

猜你喜欢

转载自blog.csdn.net/qq_43676757/article/details/105221699