0
点赞
收藏
分享

微信扫一扫

【洛谷主题库】B3619 10 进制转 x 进制

12a597c01003 2022-04-05 阅读 107
c++

这是一道十进制转 x x x 进制问题。


对于 k k k 进制,从低位到高位,分别代表 k 0 , k 1 , k 2 , … k^0,k^1,k^2,\dots k0,k1,k2,

由此,我们可以推算出十进制转 x x x 进制的方法。

举个例子,我们将 100 0 10 1000_{10} 100010 转成 2 2 2 进制。

首先 1000 ÷ 2 = 500 … … 0 1000 \div 2=500 \dots \dots 0 1000÷2=5000,那么 2 0 2^0 20 位就是 0 0 0

商是 500 500 500,那么接着 500 ÷ 2 = 250 … … 0 500 \div 2=250 \dots \dots 0 500÷2=2500,则 2 1 2^1 21 位为 0 0 0

商是 250 250 250,继续 250 ÷ 2 = 125 … … 0 250 \div 2=125 \dots \dots 0 250÷2=1250,则 2 2 2^2 22 位为 0 0 0

商是 125 125 125,继续 125 ÷ 2 = 62 … … 1 125 \div 2=62 \dots \dots 1 125÷2=621,则 2 3 2^3 23 位为 1 1 1

以此类推。

最后算出 100 0 10 = 111110100 0 2 1000_{10}=1111101000_2 100010=11111010002

那么在实现的时候我们可以递归计算。

对于字母,我们可以用字符串 R R R 去存储。 R i R_i Ri 表示比 i i i 更高的进制下的 i 10 i_{10} i10 是多少。

AC Code:

#include<bits/stdc++.h>
using namespace std;

const string R="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//存储进制所对应的符号
int x;

void tox(int n)
{
	if(n/x==0)//边界
	{
		cout<<n;
		return;
	}
	tox(n/x);//先递归
	cout<<R[n%x];//后输出
}

int main()
{
	int n;
	cin>>n>>x;
	tox(n);
 	return 0;
}
举报

相关推荐

0 条评论