一,题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述:
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例1
输入
7 2
输出
111
二,程序分析
看到此题,如果对进制不太清楚的话,我们肯定一般不会有什么想法,但是,大家可以看一下我的思路,应该很快就能看懂。
1,首先,我们创建两个字符串,一个是保留计算结果的,一个是存入最高的进位制0-F;
2,然后,在添加两个整数m,n,一个是输入值,一个是进位制。
3 , 其次,我们先判断m为大于0的数值,如果不是,将负数转化为正数,然后,我们将【m%n】的值作为进制数存入的第一个字符串中。再将【 m/n】
的结果作为下一次【m%n】的m值。进行计算。
4,最后,因为开始的时候数是负数,我们将他变成正数进行计算,所以添加负号 “-” ,来表示之前的数进位制。
三,程序代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//首先,创建两个字符串,一个保留进位制,一个为最高16进制的位数0-F
string str, table = "0123456789ABCDEF";
int m, n;
cin >> m >> n;
bool falg = false;
//当m为负数时,先将他变成正数
if (m < 0)
{
m = 0 - m;
falg = true;
}
//将m的数值通过模取余数的方法放到str字符串中
while (m)
{
str += table[m%n];
//再通过除法,取出商,然后循环
m /= n;
}
if (falg)
str += '-';
//因为这里算出来的是正序的,但是我们需要的是反序的数字串,在通过反序的方法进行打印
reverse(str.begin(), str.end());
cout << str << endl;
return 0;
}
四,运行过程