Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定p的第n个正根的程序_C++_Algorithm - Fatal编程技术网

C++ 确定p的第n个正根的程序

C++ 确定p的第n个正根的程序,c++,algorithm,C++,Algorithm,我想计算p的第n个正根,例如,我们有n=2和p=16答案是4,因为 4^2=16。我想对大数(1试试牛顿的方法,如下所述: 取p的对数,除以n,取反对数: nthRoot(p, n) := Math.Power(10, Math.Log(p) / n) 不确定您是在专门处理整数还是什么,但这是它的psuedo代码。如果您必须提出自己的算法,那么有任意精度的数学包。 但您可以尝试这样做:以任何方式将p转换为double(double可以处理10^101)。然后使用math.h::pow(p,1.

我想计算p的第n个正根,例如,我们有n=2p=16答案是4,因为

4^2=16。我想对大数(1试试牛顿的方法,如下所述:
取p的对数,除以n,取反对数:

nthRoot(p, n) := Math.Power(10, Math.Log(p) / n)

不确定您是在专门处理整数还是什么,但这是它的psuedo代码。

如果您必须提出自己的算法,那么有任意精度的数学包。 但您可以尝试这样做:以任何方式将p转换为double(double可以处理10^101)。然后使用math.h::pow(p,1.0/n),答案将接近正确的整数(四舍五入?)。但如果p大于15位,且n太小,则此操作将失败,例如,p=10^100,n=2给出的答案为50位,这是一个太大的整数,双精度无法准确表示


将101位p转换为双精度:剪切数字(字符串)到10位数的块,乘以10到适当的功率,并添加它们。< /P>到目前为止,你尝试了什么?问题是什么?是慢的吗?给我们展示一些工作,所以这里的问题我不知道如何计算C++中的巨大数字,因为显然它们比任何东西都大。我只有一种方法来获得数组的数字。我仍然不知道如何计算!!!!!你可能应该说“主根”,因为根可能是复杂的,而不仅仅是负的。那么,你可能需要比一个简单的堆栈溢出问题更大的问题。我会先查找如何手动计算一个数字的根。然后将其转换为一个程序。然后研究它的性能。我说总是1,只是还有一个问题,p太大了,太大了ger than
unsigned long long int
你必须解释p是什么形式的。它在C#中是一个大整数吗?它是一个字符串吗?你使用的是什么语言?答案取决于所有这些。如果它在大多数语言中是一个大整数,那么几乎肯定会有一个大整数版本的Log,所以就使用它。如果它是一个字符串,你想使用它使用bigoid biginteger,然后使用以10为基数的日志,去掉足够低精度的数字,直到最后得到可以用任何语言写成float/double的数字,每去掉一个数字,日志就增加1。
nthRoot(p, n) := Math.Power(10, Math.Log(p) / n)