Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 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 位。
所以我的问题是为什么上面的解决方案有效,不会有任何精度错误吗?
数字 10^101 看起来很大。如果 n 为 2,则您无法将 k 存储在任何地方。
但是如果您查看其他约束 - k 限制为 10 ^ 9。这需要 30 位的无符号类型。double 的尾数可以很容易地保持它。
提示:问题陈述需要多少个小数位?