如何用数学(不使用字符串)将数字转换为基数16?

2024-06-06 22:23:23 发布

您现在位置:Python中文网/ 问答频道 /正文

说我有

1009732533765201

我想要:

0x1009732533765201

115558138301619329

您可以用这样的字符串在编程语言中实现这一点

内景('1009732533765201',16)

但我想要纯数学的方法。将1009732533765201转换为115558138301619329的base16

我尝试了:int('1009732533765201',16),但是这使用了字符串,对于大的数字来说速度很慢,我只寻找一个数学角度。你知道吗

下面是我知道的一个数学方法: 0x1009732533765201=115558138301619329

下面是一个python方法: 内景('1009732533765201',16)

但我只能手动完成第一个数学版本。不使用字符串将0x1009732533765201转换为将“0x”连接到“1009732533765201”且不使用eval,如何实现这一点

有没有什么方法可以不使用int('1009732533765201',16)而将1009732533765201转换为与0x1009732533765201相同的输出以获得其整数?我的目标是找到一种更快的方法

回答帕提亚射击,这是他的方法,这正是我所寻找的结果,一种没有int()的方法

orig = 1009732533765201 
num = orig 
result = 0 
i = 0 
while num != 0: 
     result += (num % 10) * (16 ** i) 
     num //= 10 
     i += 1 

print(orig, num, result, "%x" % (result))

1009732533765201 0 115558138301619329 1009732533765201


Tags: 方法字符串数字数学result编程语言num速度
2条回答

正如我在评论中所说的,Python完全知道如何处理以16为基数的数字。继续,把基数16的值赋给一个变量。你知道吗

举个例子:

Python 3.7.4 (default, Aug 12 2019, 14:45:07) 
[GCC 9.1.1 20190605 (Red Hat 9.1.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> i=0x16
>>> i
22
>>> i=0xAA
>>> i
170
>>>

正如我所说的,这对其他的基地是有效的,比如基地2:

>>> i=0b1010
>>> i
10
>>> 

和基数8:

>>> i=0o12
>>> i
10
>>>

这里的想法是,我们一次看一个原始十进制数的每一位,从右到左,将它乘以16 ** i而不是10 ** i,然后将它加到新的数字上。你知道吗

结果相当于将数字的原始十进制表示形式解释为十六进制。你知道吗

#!/usr/bin/env python

orig = 34029235
num = orig
result = 0
i = 0
while num != 0:
    result += (num % 10) * (16 ** i)
    num //= 10
    i += 1

print(orig, num, result, "%x" % (result))

运行代码让我们。。。你知道吗

bash$ ./main.py 
(34029235, 0, 872583733, '34029235')
bash$

相关问题 更多 >