版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:[https://blog.csdn.net/weixin\_42449444/article/details/94475485](https://blog.csdn.net/weixin_42449444/article/details/94475485)
给出一个P进制整数N,求N的Q进制表示(0 ≤ N ≤ 32767,2 ≤ P ≤ 16, 2 ≤ Q ≤ 16)。 大于 9 的数字依次使用小写字母 a、b、c、d、e、f 表示。 请勿使用已存在的进制转换库或函数,比如PHP中的base_convert()
等。
输入3个数,以空格分隔: 第1个数是待转换的数, 第2个数是待转换的数的进制, 第3个数是转换后的数的进制。
输入转换后的数。
31 10 16
1f
典型的进制转换问题,前俩天在牛客网刷19校招题的时候写过一个类似的进制转换题:字符串加法。这俩个进制转换的自定义函数可以在理解的基础上加以记忆,以后碰到进制转换的题就直接用就行啦。
#include <bits/stdc++.h>
using namespace std;
int XToDec(string s,int x) //将给定的x进制字符串s转换成10进制
{
int ans = 0;
for(int i = 0; i < s.length(); i++)
{
if(isdigit(s[i]))
{
ans = ans*x + (s[i]-'0');
}
else
{
ans = ans*x + (s[i]-'a'+10);
}
}
return ans;
}
string DecToX(int n,int x) //将10进制的n转换成x进制字符串
{
string ans="";
do{
int t = n%x;
n /= x;
if(t >= 0 && t <= 9)
{
ans += (t+'0');
}
else
{
ans += (t-10+'a');
}
}while(n != 0); //以防输入为0的情况
reverse(ans.begin(),ans.end());
return ans;
}
int main()
{
string N; //待转换的数N
int P,Q; //待转换的数的进制P,转换后的数的进制Q
while(cin >> N >> P >> Q)
{
cout << DecToX(XToDec(N,P),Q) << endl;
}
return 0;
}