进制转换
题目来源
牛客网:进制转换
题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例1
输入
7 2
输出
111
思路分析
- 进制转换的基本思路是取模,然后除以要转换的进制,直到除的结果为0
- 对负数进行标记,0直接打印结果
- 除的结果有大于10的数,要用ABCD等字母表示,所以采用使用string保存最终的结果
- 定义一个字符串存放0-F,16个数字,计算的结果映射到数组中得到对应的值
- 没得到一个结果拼接到字符串中,最后将字符串逆置,并打印结果
代码展示
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int m = 0;
int n = 0;
string num = "0123456789ABCDEF";//结果集映射表
while (cin >> m >> n)
{
string str = "";
//m为0
if (m == 0)
{
cout << '0';
continue;
}
int flag = 0;//标记正负
if (m < 0)
{
flag = 1;
m = -m;
}
while (m)
{
//进制转换的方法,取模,除以要转换的进制数,直到结果为0
int temp = m % n;
str += num[temp];
m /= n;
}
if (flag)
{
str += '-';
}
//逆置字符串
reverse(str.begin(), str.end());
cout << str << endl;
}
return 0;
}