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

思路很简单,首先要注意任何数的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
### 回答1: 您好,以下是将十进制数转换为十六进制的C代码示例: ``` #include <stdio.h> int main() { int decimal_num, remainder, quotient; char hex_num[100], hex_digits[] = "0123456789ABCDEF"; int i = 0; printf("请输入一个十进制:"); scanf("%d", &decimal_num); quotient = decimal_num; while (quotient != 0) { remainder = quotient % 16; hex_num[i++] = hex_digits[remainder]; quotient = quotient / 16; } printf("换为十六进制为:"); for (int j = i - 1; j >= 0; j--) { printf("%c", hex_num[j]); } return 0; } ``` 该程序会提示用户输入一个十进制,然后将其换为十六进制并输出。 ### 回答2: 要将一个十进制数转换为十六进制,可以使用以下代码: ```c #include <stdio.h> void decimalToHex(int decimal) { char hex[100]; int i = 0; while (decimal != 0) { int remainder = decimal % 16; if (remainder < 10) { hex[i] = remainder + 48; } else { hex[i] = remainder + 55; } decimal = decimal / 16; i++; } printf("换为十六进制后的结果为:"); for (int j = i - 1; j >= 0; j--) { printf("%c", hex[j]); } printf("\n"); } int main() { int decimal; printf("请输入一个十进制:"); scanf("%d", &decimal); decimalToHex(decimal); return 0; } ``` 以上代码首先定义了一个函`decimalToHex`,该函接受一个十进制作为参,并将其换为十六进制。在函中,使用一个`while`循环不断对十进制进行取余和整除操作,将余数转换为对应的十六进制字符存储在一个字符组`hex`中。最后,再倒序打印组中的字符即可得到十六进制结果。 在`main`函中,首先提示用户输入一个十进制,并通过`scanf`函读取用户输入的值。然后调用`decimalToHex`函,将用户输入的十进制作为参传递给函执行换操作。最后,返回0表示程序运行成功结束。 ### 回答3: 要将一个十进制数转换为十六进制,我们可以使用除以16取余的方法。以下是一个实现该功能的简短代码示例: ```python def decimal_to_hexadecimal(decimal_num): remainders = [] while decimal_num > 0: remainder = decimal_num % 16 remainders.append(remainder) decimal_num = decimal_num // 16 hexadecimal_num = "" for i in range(len(remainders)-1, -1, -1): if remainders[i] < 10: hexadecimal_num += str(remainders[i]) else: hexadecimal_num += chr(remainders[i] + 55) return hexadecimal_num # 输入一个十进制 decimal = 12 # 换为十六进制 hexadecimal = decimal_to_hexadecimal(decimal) print("十进制", decimal, "换为十六进制为", hexadecimal) ``` 以上代码会将十进制12换为十六进制C,并输出"十进制 12 换为十六进制为 C"。在代码中,我们首先将十进制除以16取余,并将余加入到一个列表中。然后,我们通过将余数转换为对应的十六进制字符,构建最终的十六进制字符串。最后,我们输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值