如何将int转换为基数9,没有0?

时间:2013-09-02 11:46:14

标签: python int base

如何将一个数字转换为它在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 个答案:

答案 0 :(得分:2)

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

E.g。

  • 12 - &gt; 13(正常基础9) - &gt; 14(修改后的基础9)
  • 9 - &gt; 10(正常基数9) - &gt; 11(修改后的基础9)
  • 100 - &gt; 121(正常基数9) - &gt; 132(修改后的基础9)

答案 1 :(得分:0)

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

数字“10”在基数10中是1 * 10 + 0 * 1,在基数9中是1 * 9 + 0 * 1.

答案 2 :(得分: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

答案 3 :(得分: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)