万能题解(进制大多都能用!!!)
2026-10-07 20:11:20
发布于:江苏
4阅读
0回复
0点赞
本人写了1个函数
//Base_Transfer(int m,string s,int k) //将m进制数s转化为k进制(返回值string)
//m <= 16 && k <= 16;
string Base_Transfer(int m,string s,int k)
{
string c = "0123456789ABCDEF";
long long val = 0;
long long mul = 1;
for(int i = s.size() - 1; i >= 1; i--)
{
if(s[i] >= '0' && s[i] <= '9')
{
val += int(s[i] - '0') * mul;
}
else
{
val += (int(s[i]) - 55) * mul;
}
mul *= m;
}
if(s[0] >= '0' && s[0] <= '9')
{
val += int(s[0] - '0') * mul;
}
else
{
val += (int(s[0]) - 55) * mul;
}
string res = "";
while(val > 0)
{
res = c[val % k] + res;
val = val / k;
}
return res;
}
原理很简单,把其他进制转10进制,再把10进制转其他进制。
所以答案很简单了……
#include <bits/stdc++.h>
using namespace std;
string BT(int m,string s,int k)
{
string c = "0123456789ABCDEF";
long long val = 0;
long long mul = 1;
for(int i = s.size() - 1; i >= 1; i--)
{
if(s[i] >= '0' && s[i] <= '9')
{
val += int(s[i] - '0') * mul;
}
else
{
val += (int(s[i]) - 55) * mul;
}
mul *= m;
}
if(s[0] >= '0' && s[0] <= '9')
{
val += int(s[0] - '0') * mul;
}
else
{
val += (int(s[0]) - 55) * mul;
}
string res = "";
while(val > 0)
{
res = c[val % k] + res;
val = val / k;
}
return res;
}
int main()
{
string num;
cin >> num;
cout << BT(2,num,10) << endl << BT(8,num,10) << endl << BT(16,num,10);
}
求一个点赞+互关!!!
这里空空如也





有帮助,赞一个