【问题标题】:How to convert an int to base 9, with no 0's? [duplicate]如何将 int 转换为 base 9,没有 0? [复制]
【发布时间】:2023-03-09 06:46:01
【问题描述】:

如何将数字转换为 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)

【问题讨论】:

  • 我认为 base 9 也没有 9。以 9 为底的 10 意味着以 10 为底的 1*9 + 0*1 = 9
  • 为什么基数 9 not 会有零?

标签: python int base


【解决方案1】:

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

例如

  • 12 -> 13(正常基数 9)-> 14(修改基数 9)
  • 9 -> 10(正常基数 9)-> 11(修改基数 9)
  • 100 -> 121(正常基数 9)-> 132(修改基数 9)

【讨论】:

    【解决方案2】:

    基数 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】:

      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) 
      

      【讨论】:

        【解决方案4】:

        我认为 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 为底。

        【讨论】:

        • 我也这么认为,但也不认为这能回答问题。
        • 其实我不太清楚这个问题。我不知道提问者到底想做什么。
        • 我稍微更新了 OP 以尝试更清楚地说明我的要求。我想要一个将数字转换为基数 9 的函数,它的基数是 1-9 而不是 0-8。
        猜你喜欢
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 2015-10-07
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        相关资源
        最近更新 更多