小编Con*_* An的帖子

找出分数 a/b 的小数点后第 k 位,其中 a,b,k 是非常大的整数(小于 10e18)

我的任务是在分数 (a/b) 的小数点后找到第 k 个位置的数字。昨天我发现了这个算法。
为了获得小数点后的任何数字,我生成一个名为 rem 的变量并进行循环

for (int i = 1; i <= k+1; i++)    
      {
         rem = a%b;
         a = rem*10;
      }
      cout << a/b;    
Run Code Online (Sandbox Code Playgroud)

循环将返回一个值,该值是小数点后的第 k 位数字。
但是任务要求我计算 a,b,k 是非常大的数字(小于或等于 10e18),所以代码肯定会超过时间限制。

  • 找出重复前的位数。它是分母中 2 和 5 因数中的较大者。
  • 如果 k 不超过位数,则运行 for 循环。
  • 否则,我们仍将 for 循环运行到 k+1。将除法余数的值存储在变量 x 中。
  • 使用上面相同的内容运行 while 循环,直到余数再次具有 x 的值。从那时起,将除法的每个商存储到一个数组名称 qut 中。
  • while 循环结束后,数组将在 repetend 中存储每个数字。根据数组里面的位数,我们可以计算出第k位。
    然而,这个算法仍然被证明是耗时的,因为在 a 和 b 是两个连续整数的情况下,重复变得非常大。你能帮我出个主意吗?

c++ algorithm math

5
推荐指数
1
解决办法
1089
查看次数

标签 统计

algorithm ×1

c++ ×1

math ×1