我正在使用我自己的91号数字系统(非传统)在python 3.6中为我的研究项目的RSA算法。它工作得很好但不是大数字。我需要它使用的数字大于1024位。
它不适用于某些数字,尤其是那些大数字。
问题是:为什么不起作用?
这是我的代码:
_unnonagesimal = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^/*?&<>()[]@%$#,;'`~|\"\\_"
def unnonagesimal_to_decimal(s):
return sum([_unnonagesimal.find(var) * len(_unnonagesimal) ** i
for i, var in enumerate(reversed(s))])
def decimal_to_unnonagesimal(n):
if n == 0:
return 0
else:
s = ""
while n != 0:
s += _unnonagesimal[n % len(_unnonagesimal)]
n = int(n / len(_unnonagesimal))
return s[::-1]
其中:
unnonagesimal_to_decimal(s)
将非超常字符串s
转换为十进制数字。
和
decimal_to_unnonagesimal(n)
将十进制int n
转换为非超常数。
答案 0 :(得分:0)
好的,我要感谢@ user2357112
问题出在int(blah / blah)。 更正为int(blah // blah)。 现在工作正常。
这个问题是因为我从python 2切换到了python 3。 对于任何不知道的人:在python 2中,5/2 = 2但在python 3中,5/2 = 2.5但是5 // 2 = 2
我只是认为在python 2和3中分割整数是相同的。
python 3.6.5中的工作代码:
_unnonagesimal = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^/*?&<>()[]@%$#,;'`~|\"\\_"
def unnonagesimal_to_decimal(s):
return sum([_unnonagesimal.find(var) * len(_unnonagesimal) ** i for i, var in enumerate(reversed(s))])
def decimal_to_unnonagesimal(n):
if n == 0:
return 0
else:
s = ""
while n != 0:
s += _unnonagesimal[n % len(_unnonagesimal)]
n = int(n // len(_unnonagesimal))
return s[::-1]