p进制转10进制,10进制转p进制(C++/Python)

本文介绍了如何使用C++和Python实现p进制数转换为10进制及10进制转换为p进制的方法,通过详细步骤和代码示例,帮助读者理解基本的转换原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路很简单,首先要注意任何数的p进制都是基于10进制进行定义的。回顾一下p进制数 ( a n a n − 1 ⋯ a 0 ‾ ) p (\overline{a_na_{n-1}\cdots a_0})_{p} (anan1a0)p的定义式:
( a n a n − 1 ⋯ a 0 ‾ ) p = ∑ i = 0 n a i p i (\overline{a_na_{n-1}\cdots a_0})_{p}=\sum_{i=0}^n a_i p^i (anan1a0)p=i=0naipi

其中右侧的计算都是基于十进制的。我们再将右侧的十进制结果记作 T = ( t k t k − 1 , ⋯ t 0 ‾ ) 10 T=(\overline{t_kt_{k-1},\cdots t_0})_{10} T=(tktk1,t0)10,其中的 k k k就是十进制数的位数减一了。

很显然,p进制转10进制的关键就在于获得 a i ( i = 0 , 1 , ⋯   , n ) a_i(i=0,1,\cdots,n) ai(i=0,1,,n)了。而10进制转p进制的关键在于获得 t i ( i = 0 , 1 , ⋯ k ) t_i(i=0,1,\cdots k) ti(i=0,1,k)。由此轻松编程。

Cpp Side

long long int PToTen(long long int num, int p)
{
	long long int result = 0;
	long long int m = 10, n = 1;
	while (m / 10 <= num)
	{
		result += (num % m) / (m / 10) * n;
		m *= 10;
		n *= p;
	}
	return result;
}

long long int TenToP(long long int num, int p)
{
	long long int result = 0;
	long long int m = p, n = 1;
	while (m / p <= num)
	{
		result += (num % m) / (m / p) * n;
		m *= p;
		n *= 10;
	}
	return result;
}

Python Side

Python本身对任意进制转10进制可以通过现成的函数int的参数base来完成,不过10进制转任意进制貌似没有提供现成的函数。

def PToTen(num : int, p : int):
    result = 0
    m, n = 10, 1
    while m // 10 <= num:
        result += (num % m) // (m // 10) * n
        m *= 10
        n *= p
    return result

def TenToP(num : int, p : int):
    result = 0
    m, n = p, 1
    while m // p <= num:
        result += (num % m) // (m // p) * n
        m *= p
        n *= 10
    return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值