如何找到1 / N的十进制表示的K个第一个数字

时间:2011-01-14 18:34:33

标签: algorithm math

这是我遇到的一个访谈问题:查找K的小数表示的1/N个第一位数字。看起来我们只需要计算10^K/N来解决问题。是否有意义 ?看起来我错过了一些东西,因为解决方案太容易了。

3 个答案:

答案 0 :(得分: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位的终止表示。

此处,n1 / n中的分母,k是以1 / n的十进制表示形式打印的位数。

请注意,通过将value *= 10更改为value *= b,您也可以打印1 / n的b-ary表示。

答案 1 :(得分:4)

对于大K和小N,计算10 ^ K / N可能是非常昂贵的。

这可能更接近于一个好的解决方案:long division。这是我们在计算器之前用来划分数字的方式。 :)

显然,你应该只执行这个算法,直到它产生K个数字。

答案 2 :(得分:1)

如果它是前k个数字,是不是很容易将分子乘以10 ^ k,因此更容易除以N?如果我们需要答案,即十进制表示,那么我们将再次将结果除以10 ^ K,以便先前的乘法无效。