任意进制转换10进制和10进制转换成任意进制
1 . 任意进制转10进制
原理 :输入是一个字符串,由函数体转换成数(考虑是否溢出int范围)。
#include<iostream>
using namespace std;
#include<algorithm>
typedef long long LL;//这个具体要看要求,如果给的输入是否会超过一个int的范围
#include<string>
LL TransDec(string num, int transTarget)
{
reverse(num.begin(), num.end());
LL ans = 0;
LL weight = 1;
LL temp = 0;
for (int i = 0; i < (int)num.size(); i++)
{
if (num[i] >= '0'&&num[i] <= '9')
temp = num[i] - '0';
if (num[i] >= 'A'&&num[i] <= 'F')
temp = num[i] - 'A' + 10;
ans += temp*weight; //这里也同理,所以temp 和weight均为LL型
weight *= transTarget;
}
return ans;
}
int main()
{
string inputStr;
cin >> inputStr;
cout << TransDec(inputStr,16);
return 0;
}
2 .10进制转任意进制
原理 :输入是一个数(记得考虑是否溢出int)由函数体转换成字符串。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string TransHex(int num, int Transtarget )
{
string Templatestr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//最多支持36进 制转换,后续可以添加
string ans = "";
if (num == 0)
ans = '0';
while (num)
{
ans += Templatestr[num%Transtarget];
num /= Transtarget;
}
reverse(ans.begin(), ans.end());
return ans;
}
int main()
{
int n;
cin >> n;
cout<<TransHex(n,16);
return 0;
}
3.最简单的10进制转换成其他进制(主要8和16)
这个输出的是小写字母,不是大写的
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
cout<<oct<<n<<endl;//8进制
cout<<hex<<n<<endl;//16进制 n = 15 输出f 小写
}