Как проверить, может ли некоторое число быть выражено как x ^ y, если число является десятичным? - PullRequest
0 голосов
/ 30 августа 2018

Мне задали этот вопрос в интервью по кодированию.

Мы можем определить, можно ли выразить число в x ^ y, используя log или простые множители, или другими способами, если это число является целым числом, таким как 16, 25, 100. Но что, если число равно 0,4 или 0,002 или любое другое десятичное число, как подойти к этой ситуации.

Пожалуйста, помогите мне найти подход. Спасибо:)

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Предполагая, что 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

Итак, один из способов сделать это - сначала посмотреть, можно ли написать число после десятичной дроби и нули, например. 25 в 0,25, 8 в 0,008, который на самом деле называется «мантиссой» действительного числа как x ^ y - тогда, если это y в x ^ y равно 10-й степени в абсолютном значении, вы можете записать его как x ^ y, где x , у - целые числа с у как отрицательным.

0 голосов
/ 30 августа 2018

Умножьте на 10 ^ y несколько раз, пока число не станет целым числом. Это равносильно перемещению десятичной точки на y раз за разом до последней значащей цифры.

* 1003 Е.Г. *

0,4 => 40: не квадрат

0,00002 => 0,002 => 0,2 => 20: не квадрат

0,0081 => 0,81 => 81: квадрат

0 голосов
/ 30 августа 2018

Если 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 , Это сохраняет точное значение десятичного числа, и процедура может правильно проверить, является ли обратная величина целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...