问题

给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数

输入描述:

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

输出描述:

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

示例1:

输入

72

输出

111

解题思路:

原理:N进制数,每个进制位的值分别是X0*N^0, X1*N^1, X2*N^2…..,X0,X1,X2就是这些进制位的值,进行取模余数就是当前低进制的位的值是多少,通过除掉进制数,进入下一个进制位的计算。

我们通过示例来演示:10进制的7转化为2进制。
7 % 2 = 1; 7 / 2 = 3;  步骤1️⃣
3 % 2 = 1;3 / 2 = 1;   步骤2️⃣
1 % 2 = 1; 1 / 2 = 0;  步骤3️⃣

我们把每次得到的进制位的值,都保存在字符串中,由于先保存的是最后一位进制位的值,所以最后要把字符串逆置。如果是16进制,得到的进制位值可能会是A,B…,我们可以提前把可能会出现的值都保存到字符串中,通过字母映射的方法获取,如果获取的进制位的值是10,映射到字符串就是字符A。

注意: 还要判断这个数是不是负数,如果是负数,要在前面加负号(’-‘)

代码:

#include<iostream>
using namespace std;
#include<string>
#include<algorithm>

int main()
{
string map = “0123456789ABCDEF”; //映射字符串
string ret; //存放结果的字符串
int m, n;
cin >> m >> n;

//判断正负
bool flag = false;
if(m < 0)
{
m = -m;
flag = true;
}

//得到的结果都保存到ret字符串中
while(m != 0)
{
ret += map[m % n];
m /= n;
}

//如果是负数,则加’-‘
if(flag == true)
ret += ‘-‘;

//逆置整个字符串
reverse(ret.begin(), ret.end());
cout << ret << endl;
return 0;
}

————下载必看————

1、资源通过互联网渠道公开获取,仅供阅读测试,请在下载后24小时内删除,谢谢合作!
2、本站解压密码统一为:yudouyudou
3、本站微信客服/失效补发:rsst58
4、若版权方认为本站侵权,请联系发邮件至(rsstime@qq.com)处理。
5、关于下载,播放声音字幕,解压等问题,请点击查看>>常见问题
时光屋 » 进制转换 C++

发表评论

至臻视听_发烧收藏

会员介绍 常见问题