c++算法之进制转换

发布时间:2024年01月20日

目录

将任意进制转换为十进制

将十进制转换为k进制

例题

蓝桥oj2489 进制

问题描述

蓝桥oj2095九进制转十进制

蓝桥oj1230进制转换

题目描述

输入描述

输出描述

输入样例

输出样例


将任意进制转换为十进制

ll x = 0;
for(int i = 1;i <= n;++ i)
{
    x = x*k + a[i];
}
cout<< x <<endl;

将十进制转换为k进制

ll x;cin>>x;
while(x)a[++cnt]=x%k,x/=k;
reverse(a+1,a+1+cnt);//反转使高位在1

例题

蓝桥oj2489 进制

问题描述

请问十六进制数 2021ABCD 对应的十进制是多少?

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
using ll = long long;
const int N = 50;
int a[N];
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	
	string s = "2021ABCD";
	for (int i = 0;i < s.length(); ++ i)
	{
		if ('0' <= s[i] && s[i] <= '9')a[i + 1] = s[i] - '0';
		else a[i + 1] = s[i] - 'A' + 10;
	}

	ll x = 0;
	for (int i = 1; i <= s.length(); ++i)
	{
		x = x * 16 + a[i];
	}
	cout << x << endl;
	return 0;
}

蓝桥oj2095九进制转十进制

九进制正整数 (2022)9转换成十进制等于多少?

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
using ll = long long;
const int N = 50;
int a[N];
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n = 4;
	string s = "2022";
	for (int i = 1; i <= 4; ++i)a[i] = s[i - 1] - '0';

	ll x = 0;
	for (int i = 1; i <= n; ++i)
	{
		x = x * 9 + a[i];
	}
	cout << x;

	return 0;
}

蓝桥oj1230进制转换

题目描述

给定一个 N 进制数 S,请你将它转换为 M 进制。

输入描述

第一行为一个整数T,表示测试数据数量。 (1≤T≤1051≤T≤105)

每个测试用例包含两行,第一行包含两个整数 N,M。

第二行输入一个字符串 S,表示 N 进制数。

数据范围保证:2≤N,M≤16,若 N≥10,则用 A~F表示字码 10~15。保证 S 对应的十进制数的位数不超过 10。

输出描述

输出共 T,每行表示一组数据的答案。

输入样例

2
2 10 
10101 
11 2
1793A5068

输出样例

21
10101111001010100111010101011

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll; int a[1000];
char ch[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
void solve()
{
	int n, m; cin >> n >> m;//n进制转换为m进制
	string s; cin >> s;
	for (int i = 0; i < s.length(); ++i)
	{
		if ('0' <= s[i] && s[i] <= '9')a[i+1] = s[i] - '0';
		else a[i+1] = s[i] - 'A' + 10;
	}
	ll x = 0;
	for (int i = 1; i <= s.length(); i++)
	{
		x = n * x + a[i];//s的十进制
	}

	string ans;
	while (x)
	{
		ans += ch[x % m];
		x /= m;
	}
	reverse(ans.begin(), ans.end());
	cout << ans << endl;

}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

	int t; cin >> t;
	while (t--)
	{
		solve();
	}

	return 0;
}

文章来源:https://blog.csdn.net/weixin_63201442/article/details/135715970
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。