如何找到一个整数乘法器以达到10的幂



我正在尝试创建一个精确的十进制数字类型。我把它存储为有理p/q,其中q总是10的幂。

现在,如果我试图对其中一个数字进行除法,我需要看看结果是否可以表示为有限的十进制展开。例如,10.2 / 80 => 0.1275可以,但10 / 3 = 3.333...不可以。

它可以归结为看一个整数q,然后问:是否有一个整数m使得:

q * m = 10 ^ n    (q, m, n are all integers)

我可以写一个循环来搜索它,测试n=0,1,2,3,。。。?但是还有更直接的方法吗?我不知道如何用代数方法解那个小方程。

首先,你需要看看q是否可以写成2s和5s的乘积;如果可以的话,m和n将有一个整数解。否则,就不会有.

我们可以找到整数a、b和c,使得q=(2^a((5^b(c和c不能被2或5整除。只要q仍然可以被2整除,就可以反复将q除以2,每次递增a;然后,除以5并增加b,只要q仍然可以被5整除;那么,c将是在这个重复除以2和5的过程之后q的值剩下的任何值。

在这一点上,如果c=1,我们可以找到一个解决方案;否则,就没有整数m有效。假设c=1,检查a和b:

  • 如果a=b,q已经是10的幂;选择m=1
  • 如果<b、 选择m=2^(b-a(
  • 如果a>b、 选择m=5^(a-b(

最新更新