在一场编码大赛中,我给了我一个十进制的数字,并被问及这个数字是否可以在其他任何基数中都具有最小值,如果是,则将其转换。
例如。让一个十进制数为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
}
}
,那么我们可以将其转换为其他具有最小值的基数吗?
答案 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
因此,只需从列表中的最大到最小开始检查底数,一旦数字增加,就使用以前的底数...