2011-01-14 1 views
6

Это вопрос интервью, который я натолкнулся: найдите K первые цифры десятичного представления 1/N. Похоже, нам нужно просто вычислить 10^K/N, чтобы решить эту проблему. Имеет ли это смысл ? Похоже, я чего-то не хватает, потому что решение слишком простое.Как найти K первых цифр десятичного представления 1/N

+0

Что делать, если N равно 3? – Pointy

+0

это не сработает, потому что 1/8 == .125. Если k == 2, то 10^2/8 = 12,5, что не помогает. Ответ, который вам нужен, - 25, верно? возможно, я вижу это неправильно? –

+0

Последние 3? или первые 3? ... Надеюсь, вы знаете, что есть числа с представлением, которое имеет бесконечные цифры ... 1/3, 1/9 –

ответ

6

Просто реализовать класс-школы долгое разделение:

int value = 1; 
bool outputDecimalSeparator = false; 
int digitsOutput = 1; 
while(digitsOutput <= k) { 
    if (value == 0) { 
     Console.Write(0); 
    } 
    else { 
     if (value < n) { 
      Console.Write(0); 
      value *= 10; 
     } 
     else { 
      Console.Write(value/n); 
      value %= n; 
     } 
    } 
    if (outputDecimalSeparator == false) { 
     outputDecimalSeparator = true; 
     Console.Write('.'); 
    } 
    digitsOutput++; 
} 
Console.WriteLine(); 

Филиал на value == 0 должен определить, когда 1/n имеет завершающее представление менее k цифр.

Здесь n знаменатель в 1/n и k является количество цифр для печати в десятичном представлении 1/n.

Обратите внимание, что, изменив value *= 10 на value *= b, вы также можете распечатать b-арное представление 1/n.

1

Если это первые k цифр, не так ли есть прямолинейное умножение числителя на 10^k, и поэтому становится легче делить на N? И если нам нужен ответ, то это будет десятичное представление, то мы закончим деление результата на 10^K снова, чтобы предыдущее умножение аннулировалось.

+1

Это тот же вопрос, который задает ОП, это не ответ. – user470379

+0

@ user470379, у ОП был немного замешательство в его вопросе. Если ему просто нужны первые цифры K, то он очень прямолинейный, поскольку мы делаем это для удобства. –

4

Расчет 10^K/N может быть чрезвычайно дорогостоящим с большими K и маленькими N.

Это, вероятно, ближе к хорошему решению: long division. Так мы делили числа перед калькуляторами. :)

Очевидно, что вы должны выполнять этот алгоритм только до тех пор, пока он не даст K цифр.

Смежные вопросы