我需要在python3中获取非常大数的第七个根。我尝试了很多东西,但是我已经溢出了所以我认为我使用了十进制,这对我来说似乎很好,但我只能将它转换为字节,所以我可以将它转换为base64之后。
这是我的代码(c
是大数字):
from decimal import *
import base64
if len(str(c)) > 25: getcontext().prec = len(str(c))
else:getcontext().prec =25
x = Decimal(str(c))
a = x ** Decimal(1) / Decimal(7)
res = a.quantize(Decimal('1.'), rounding=ROUND_DOWN)
res = int.to_bytes(res, length=int(res.bit_length()/8+1), byteorder='big', signed=False)
print(base64.b64encode(res).decode("utf-8"))
但是我收到了这个错误:
AttributeError Traceback (most recent call last)
<ipython-input-48-85e144f30dc7> in <module>()
----> 1 res = int.to_bytes(res, length=int(res.bit_length()/8+1), byteorder='big', signed=False)
2 print(base64.b64encode(res).decode("utf-8"))
AttributeError: 'decimal.Decimal' object has no attribute 'bit_length'
我知道我应该得到它。但我只是复制了我用来将int转换为字节的方式。
答案 0 :(得分:2)
您可以通过采用256个基数的对数来计算数字的大小(以字节为单位,因为一个字节可以编码256个不同的数字):
length = math.ceil(math.log(res, 256))
res = int.to_bytes(res, length=length, byteorder='big', signed=False)
答案 1 :(得分:1)
首先将小数转换为字符串,然后转换为字节
x = Decimal(str(c))
a = x ** Decimal(1) / Decimal(7)
s = str(a)
b = bytes(str(a), encoding = 'utf-8')
res = base64.b64encode(b)
解码:
v = base64.b64decode(res)
v.decode('utf-8')