进制的本质:
任意进制转十进制:
十进制转任意进制:
接下来进入例题环节:
#include <bits/stdc++.h>
using namespace std;
int main()
{
//2021ABCD 十六进制 -> 十进制
string s = "2021ABCD";
reverse(s.begin(), s.end());
//cout<<s; //DCBA1202
int sum = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 'A' && s[i] <= 'F')
{
int tmp = s[i] - 'A' + 10;
sum = sum + tmp * pow(16, i);
}
else
{
int tmp = s[i] - '0';
sum = sum + tmp * pow(16, i);
}
}
cout << sum;
return 0;
}
这道题是2022年蓝桥杯省赛的一道填空题还是比较简单的
#include <bits/stdc++.h>
using namespace std;
int a[50];
int main()
{
//九进制 -> 十进制
//2022
string s="2022";
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='8') a[i+1]=s[i]-'0';
}
int sum=0;
for(int i=1;i<=s.size();i++)
{
sum=sum*9+a[i];
}
cout<<sum;
return 0;
}
这道题就是对N进制转M进制的模拟,值得注意的一点是,这道题要分成两个步骤。首先对要将N进制转成十进制,然后十进制再转成M进制 。
#include<bits/stdc++.h>
using namespace std;
char ch[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
int main()
{
int t; cin >> t;
int a[50], b[50];
while (t--)
{
//n代表是n进制,m是要求转化为m进制
int n, m; cin >> n >> m;
string s; cin >> s;
//n进制转化为十进制,十进制结果在转化为m进制
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 'A' && s[i] <= 'F') a[i] = s[i] - 'A' + 10;
else a[i] = s[i] - '0';
}
int sum = 0;
for (int i = 0; i < s.size(); i++)
{
sum = sum * n + a[i];
}
//十进制转化为m进制
string s1;
while (sum)
{
s1 += ch[sum % m];
sum = sum / m;
}
reverse(s1.begin(),s1.end());
cout << s1 << endl;
}
return 0;
}