进制转换
本题链接
题目描述
给定一个十进制数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());
的使用。