题意:给定 n , p n,p n,p已知 k n = p k^n=p kn=p,求 k k k, 1 ≤ p ≤ 1 0 101 1\le p\le10^{101} 1≤p≤10101。
思路:正解应该是二分 + + +高精度快速幂。 但是本题可以有个更快解法:用 d o u b l e double double, − 1.7 e 308 ≤ d o u b l e ≤ 1.7 e 308 -1.7e^{308}\le double\le 1.7e^{308} −1.7e308≤double≤1.7e308,然后调用 p o w ( p , 1.0 / n ) pow(p,1.0/n) pow(p,1.0/n)即可,值得注意的是 d o u b l e double double精度最多有 16 − 17 16-17 16−17位,后面的位数都会取0而导致精度缺失,但是本题的数据在前面几位不同才会导致答案不同,大数的后面位数不会有影响最终答案。
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<cmath> typedef long long ll; const int N=1e6+5; using namespace std; int main(){ double n,p; while(cin>>n>>p) cout<<pow(p,1/n)<<endl; }