POJ 2109
来源:互联网 发布:常见协议端口号 编辑:程序博客网 时间:2024/05/20 09:24
题意:
给你两个数n和p,其中1<=n<=200,1<=p<-10^101,让你求k,满足k^n = p,k的范围是1<=k<=10^9
分析:
这个题难就难在大整数的处理上面,pow(m,n)求的是m的n次方,可以用m的1/n次方来求k
二分查找阿,对阿,恍然大悟阿,二分法就过了这道题
但是二分的时候出现了一些问题,再定义n和p时,我一开始是使用long long结果在计算大数的时候出不了结果,把这两个都改成double的话,就出现了结果.原因就出在pow的参数上面.据说这是一个贪心题,但是没有想到好的实现思路,暂时先放着.
具体参数如下:
double pow (double base , double exponent);
float pow (float base , float exponent);
long double pow (long double base, long double exponent);
double pow (Type1 base , Type2 exponent); // additional overloads
代码:
//verion:先二分一下#include <iostream>#include <cmath>#include <algorithm>using namespace std;int main(){ double n; double p; long long right,mid,left; while(cin>>n>>p) { left=0; right=1000000002; double r=0.00000001; while(right-left>r) { mid=(left+right)/2.0; if(pow(mid,n)-p>0) { right=mid; } else if(pow(mid,n)-p<0) { left=mid; } else { cout<<mid<<endl; break; } } } return 0;}/*//version2:直接pow来求解,这是个bug阿#include <iostream>#include <cmath>#include <algorithm>using namespace std;int main(){ double n,p; while(cin>>n>>p) { cout<<pow(p,1.0/n)<<endl; } return 0;}*/
阅读全文
0 0
- POJ 2109
- POJ 2109
- poj 2109
- POJ 2109
- poj 2109
- POJ 2109
- POJ 2109
- poj.2109
- POJ 2109
- poj-2109
- poj 2109
- POJ 2109
- POJ-2109
- poj 2109
- POJ 2109
- poj 2109
- POJ 2109
- poj 2109
- C++学习笔记-模板
- oracle创建外键约束的两种方式
- JAVA配置JDK(Java SE Development Kit)
- HDU3533:Escape(BFS) (D)
- 1010. Radix (25)
- POJ 2109
- 拆分窗口
- InteliJ IDEA快捷键
- SDUT 2553 完美的素数
- VScode 使用问题记录
- JavaScript继承基础讲解
- Spotfire经验总结—累积百分比(柏拉图)的绘制方法
- flask 学习小计 -- 组织结构
- CentOS7清理yum缓存和释放内存方法