square_root C 中非常大的数字,直到 < 1000

square_root very large number in C until < 1000

我有一个很大的数字:

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 中存储这个大小的数字比预期的要复杂。

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

或者,您可以编写自己的 bigint 例程并手动实现平方根。这将需要一些时间才能正确实施,因为您基本上必须一次一个数字地手工完成所有数学运算。可以做到(我已经做到了),但不会"simple".

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

或者,google bignum c, and see if you can find any library that implements large integer arithmetic. Take a look at bignum.c by Steven Skiena, libraries like MPFR and MPIR