2

如何将一个数字转换为 base9 中的等值数字,但需要注意它的 base9 没有“0”数字。

例如:
Base10 = 0, 1, 2, 3, .. 9, 10, 12 ... 28, 29, 30, ... 62, 63, 64 等
Base9 = N/A, 1, 2, 3 , .. 9, 11, 12 ... 31, 32, 33, ... 68, 69, 71 等

我希望能够获取一个普通的十进制数(例如:10)并将其返回到 base9 中,忽略 0 位(例如:11)。

总的来说,我是 python 和编程的新手,更不用说我在数学方面缺乏知识,所以我的第一次尝试相当草率。它只适用于较小的数字,我觉得有一种更简单的方法可以做到这一点。

def base9(x):
    count = 0
    a = xrange(10,100,9)
    while count != x:
        if x < a[count]:
            return x + count
        count += 1


print base9(10)
4

4 回答 4

2

将数字转换为正常的以 9 为基数。然后将 1 加到最低位,以及除最高位之外的所有其他数字(这意味着当数字为 1 位时,我们将其加 1)。

例如

  • 12 -> 13(正常基数 9)-> 14(修改基数 9)
  • 9 -> 10(正常基数 9)-> 11(修改基数 9)
  • 100 -> 121(正常基数 9)-> 132(修改基数 9)
于 2013-09-02T12:11:53.250 回答
0

基数 9 可以有一个零,例如 0 是 0。10 是 1*9 + 0*1 = 9。但是,它不能有 9。每个数字都告诉您有多少个 9 的升幂相加。
您可能应该检查是否在输入过程中得到负数。
对于每个输入,继续除以 9 并检查余数。

def base9(x):
    sign = 1
    if x < 0:
    sign = -1
    x *= -1
    result = 0
    index = 0
    while x > 0:
        result += (x%9) * 10**index
        x /= 9
        index += 1
    return result*sign
于 2013-09-02T12:11:41.090 回答
0

我认为Base10是0,1,2,3,4,5,6,7,8,9,Base9是0,1,2,3,4,5,6,7,8。

数字“10”是 1*10 + 0*1 以 10 为底,1*9 + 0*1 以 9 为底。

于 2013-09-02T11:55:16.723 回答
0

base9 是由 0, 1, 2, 3, ..., 8 组成的整数,没有 9。例如,4 位 base9 int abcd = a*9^3 + b*9^2 + c*9^1 + d*9^0, a, b, c, d 来自 {0, 1, 2, 3, 4, 5, 6, 7, 8}。所以,11(base9) = 1*9^1 + 1*9^0 = 10(base10)。这是我将正 base10 int 转换为 base9 的代码:

def base9(x):
    digits = []
    base9_int = 0
    while x > 0:
        digits.append(x % 9)
        x = int(x / 9)
    for x in digits[::-1]:
        base9_int = base9_int * 10 + x
    return base9_int

for each in range(1, 91):
    print base9(each) 
于 2013-09-02T12:26:12.863 回答