Просто внедрите длинное деление в начальной школе:
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-ary представление 1 / n
.