Если x
является целым числом, а y
является неотрицательным целым числом, x^y
является целым числом (если мы исключим неоднозначный случай 0^0
). Если мы допустим, чтобы y
было отрицательным целым числом, то x^y
также выражается как 1/ (x^(-y))
, которое является обратной величиной неотрицательного целого числа (если мы пропустим неопределенные случаи 0^-1
и т. Д.).
Итак, если заданное вами значение x^y
не является целым числом, проверьте его обратное. Это должно быть целое число и разлагается на x^y
для целых 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
.
Если бы мне задали этот вопрос в интервью по кодированию, я бы поднял еще один вопрос. Некоторые числа, такие как 0.002
, не могут быть точно представлены в стандартной переменной с плавающей точкой. Таким образом, взятие обратной величины может не привести к целому числу, даже когда это ожидается. Это верно, например, для x=1/49
: взятие его обратной в Python 3.6.4 не дает 49
. Лучший пример - x=0.00016
. Его обратное значение должно быть 6250
, но на самом деле это 6249.999999999999
. Так что разложить эти числа сложнее. Это влияет на то, как число вводится в процедуру. Например, в Python лучшие результаты получаются, когда «десятичное число» вводится не как значение с плавающей запятой, а скорее как строка или как десятичное значение из модуля decimal
или значение дроби из модуля fractions
, Это сохраняет точное значение десятичного числа, и процедура может правильно проверить, является ли обратная величина целым числом.