我自己的数字系统实现

时间:2018-03-28 23:12:46

标签: python python-3.x numbers

我正在使用我自己的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转换为非超常数。

1 个答案:

答案 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]