在编程采访中有人问我这个问题。
如果数字是16、25、100之类的整数,我们可以得出是否可以使用对数或素数或其他方式用x ^ y表示数字。 但是,如果数字是0.4或0.002或任何其他十进制数字,该怎么办?
请帮助我找到一种方法。谢谢:)
答案 0 :(得分:2)
如果x
是一个整数,而y
是一个非负整数,则x^y
是一个整数(如果我们忽略了模棱两可的情况0^0
)。如果我们允许y
为负整数,则x^y
也表示为1/ (x^(-y))
,它是非负整数的倒数(如果我们忽略{{ 1}}等。
因此,如果给定的0^-1
值不是整数,请检查其倒数。该整数必须为整数,并且可分解为x^y
和x^y
的整数。{p>
我在这里假设x
和y
必须是整数。如果不是,则可以使用x
,其中y
是所需的结果。例如,如果给定a^1
,则可以使用a
。但是,如果我们对0.4
和0.4^1
有整数限制,那么您会看到x
不是整数,y
也不是整数。因此,这不能分解。给0.4
,我们尝试它的倒数2.5
,然后看到它的唯一分解是0.002
,所以500
的唯一分解是500^1
。
如果在编码采访中被问到这个问题,我会再说一分。某些数字,例如0.002
,无法在标准浮点变量中精确表示。因此,取其倒数可能不会导致整数,即使期望如此。例如,对于500^-1
,这是正确的:在Python 3.6.4中取其倒数不会给出0.002
。更好的例子是x=1/49
。其倒数应为49
,但实际上为x=0.00016
。因此,分解这些数字更加困难。这会影响将数字输入到例程的方式。例如,在Python中,如果未将“十进制数”作为浮点值输入,而是将其作为字符串或6250
模块的十进制值或{{ 1}}模块。这样可以使十进制数的值保持准确,并且例程可以正确地检查倒数是否为整数。
答案 1 :(得分:1)
假设x,y必须是整数,则可以这样操作:
让我们以0.25
将其重写为25*10^(-2)
现在写25 as 5^2
现在您有
0.25 = (5^2)(10^-2)
= ((5^-1)^(-2))(10^-2)
= ((5^-1)*(10))^-2
= 2^-2
如果您具有5、10的相等功率(绝对值),则可以这样做。
另一个例子:
0.5 = ( 5^1 )* ( 10^-1)
= (( 5^-1)^-1)*(10^-1)
= ((5^-1)*(10))^-1
= 2^-1
因此,一种方法是首先查看是否可以在小数和零之后写数字,例如0.25中的25,0.008中的8,实际上称为实数的“尾数”,即x ^ y-如果x ^ y中的y等于绝对值的10的幂,则可以将其写为x ^ y,其中x ,y是y为负的整数。
答案 2 :(得分:0)
重复乘以10 ^ y直到数字变为整数。这等于将小数点重复移动y个位置,直到最后一个有效数字之后。
例如
0.4 => 40:不是正方形
0.00002 => 0.002 => 0.2 => 20:不是正方形
0.0081 => 0.81 => 81:正方形