如何将十进制数转换为其最小值的基数?

时间:2019-07-13 00:57:08

标签: python c math base

在一场编码大赛中,我给了我一个十进制的数字,并被问及这个数字是否可以在其他任何基数中都具有最小值,如果是,则将其转换。 例如。让一个十进制数为function Remove-Property { param( [Parameter(Mandatory, ValueFromPipeline, Position = 0)] [object] $InputObject, [Parameter(Mandatory, Position = 1)] [string] $NamePattern ) process { foreach ($el in $InputObject) { foreach ($propName in $el.psobject.Properties.Name) { if ($propName -like $NamePattern) { $el.psobject.Properties.Remove($propName) } else { $null = Remove-Property -InputObject $el.$propName -NamePattern $NamePattern } } } $InputObject } } ,那么我们可以将其转换为其他具有最小值的基数吗?

2 个答案:

答案 0 :(得分:4)

我假设您获得了一个数字序列,并且需要确定该数字序列具有最小值的基数。由于基数必须大于最大数字,但是较大的基值也意味着每个数字都较大(保存一位数字),因此最小基数为d_max + 1,其中d_max是最大位数:

def min_base(s: str) -> int:
    return max(int(x) if x.isdigit() else ord(x) - 87 for x in s.lower()) + 1

print(min_base('12345'))  # 6
print(min_base('1A2B'))  # 12
print(min_base('BCA'))  # 13

# OP's example:
print(int('234', base=10))  # 234
print(int('234', base=min_base('234')))  # 69

答案 1 :(得分:0)

在任意基数的情况下,任何整数在其大数的基数中都有其最小值(一位数字)...

????? (base=10) = ? (base ????+1)

示例:

15 (base = 10) = F (base 16)
16 (base = 10) = G (base 17)
17 (base = 10) = H (base 18)
...

在粗体字中,一旦按字母结尾,就没有标准的约定应该如何命名数字值(Z ... base> 10 + 26之上),有时会使用希腊字母。

如果您有固定的要转换的基数列表,则小于或等于您的值的基数会产生多位数。基数越少,数字越多。整数与基数之间的比率是恒定的,因此您无需进行实际转换即可计算该数字:

digits_base1 / digits_base_2 = log(base_2) / log(base_1)
digits_base1 = digits_base_2 * log(base_2) / log(base_1)

示例:

   31 dec -> 2 digits  (base 1)
11111 bin -> 5 digits  (base 2)

2 = ceil(5 * log(2) / log(10))
2 = ceil(5 * 0.30102999566398119521373889472449 / 1)
2 = ceil(1.5051499783199059760686944736225)
2 = 2     // so 5 digit binary number has 2 digits in decimal

因此,只需从列表中的最大到最小开始检查底数,一旦数字增加,就使用以前的底数...