2

我在 UVa 上做一个问题。问题陈述如下:

我们必须找到一个数 p 的 n 次根,并且存在一个整数 k,使得 k^n=p。所以基本上我们必须找到整数k。

约束:

p<10^101,n<200,k<10^9。所有变量都是整数和正数。

c中问题的AC解决方案简单地计算,

pow(p,1/n);

我知道 double 可以保存高达 e308 的数据,但据我所知,精度可达小数点后 15 位。

所以我的问题是为什么上面的解决方案有效,不会有任何精度错误吗?

4

2 回答 2

3

数字 10^101 看起来很大。如果 n 为 2,则您无法将 k 存储在任何地方。

但是如果您查看其他约束 - k 限制为 10 ^ 9。这需要 30 位的无符号类型。double 的尾数可以很容易地保持它。

于 2012-12-09T06:44:25.530 回答
0

提示:问题陈述需要多少个小数位?

于 2012-12-09T06:30:43.923 回答