square_root在C中非常大,直到< 1000

时间:2016-09-08 23:13:14

标签: php c

我有一个非常大的数字:

char *big_numbr_str = "4325242066733762057192832260226492766115114212292022277";

我希望保持这个数字的平方根直到它为< 1000.在PHP中,我可以相对容易地做到这一点:

while($num > 1000):
    $num = sqrt($num);
endwhile;

$num = floor($num);

我现在正试图在C中实现相同,以相同的结果结束。作为参考,在while循环中经过5个循环后,PHP的最终结果来自上面的片段+起始编号为50;如果你在任何其他地方将这个数字平方根5次,你应该得到类似的结果,向下舍入。

我如何在普通C中实现同样的目标?似乎存储大量此大小在C中比预期更复杂。

2 个答案:

答案 0 :(得分:4)

你需要一个大数字库来处理这样的数字。在Linux上,您可以尝试GMP

或者,您可以编写自己的bigint例程并手动实现平方根。这需要一些时间才能正确实现,因为您基本上必须手动执行所有数学运算。它可以完成(我已经完成了),但它不会“简单”。

答案 1 :(得分:0)

为了存储这么大的整数(4325242066733762057192832260226492766115114212292022277),您可以使用array of integers,每个元素存储一个数字。该数组应该像一个整数。编写例程来进行计算(就像你在一张纸上做的那样)。

或者,google bignum c,看看是否可以找到任何实现大整数运算的库。请查看Steven Skiena的bignum.cMPFRMPIR等图书馆。