POJ2109 Power of Cryptography
题目链接:https://vjudge.net/problem/POJ-2109
知识点: C++语法
解题思路:
\(double\) 的取值范围为 \(10^{-307}~10^{308}\),小数精度是前\(16\)位,用 \(double\) 存储 \(p\) 时,虽然会产生误差,但其误差范围在 \(10^{-15}\) 的数量级内。接下来用 \(pow(p,1/n)\) 求其开 \(n\) 次方值,由于开方运算不会扩大其误差范围且题目已经规定了该题的答案必为整数值,\(10^{-15}\)这个级别的误差在四舍五入以后对于整数部分的影响可以忽略不计,故直接用\(pow()\)函数即可求出答案。
AC代码:
1 #include <cmath> 2 #include <cstdio> 3 using namespace std; 4 5 int main(void) { 6 double n , p; 7 while(scanf("%lf%lf",&n,&p)==2) { 8 double tmp = pow(p, 1 / n); 9 int k = floor(tmp + 0.5); // 四舍五入(+0.5后向下取整) 10 printf("%d\n",k); 11 } 12 return 0; 13 }
“这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”