1.肖恩的n次根 - 蓝桥云课
问题描述
喜欢研究数学问题的肖恩注意到,在编程语言中通常内置函数只有开平方根和开立方根,但是肖思想知道开高次方根(大于3次方称为高次方),应该怎么做。请你设计一个程序来帮帮肖恩。
输入描述
输入两个数字 a
和 b
,输出 a
的 b
次方根的值。
数据保证:0 < a ≤ 1000, 1 < b ≤ 5
。
输出描述
输出 a
的 b
次方根的值乘1000后保留整数的结果。
样例输入
5 3
样例输出
1769
说明
5 开 3 次方根的结果保留五位小数是 1.70998,乘 1000 得到 1709.98,保留整数以后得到 1709。
运行限制
语言 | 最大运行时间 | 最大运行内存 |
---|---|---|
C++ | 1s | 256M |
C | 1s | 256M |
Java | 2s | 256M |
Python3 | 3s | 256M |
PyPy3 | 3s | 256M |
Go | 3s | 256M |
JavaScript | 3s | 256M |
总通过次数: 261 | 总提交次数: 282 | 通过率: 92.6%
难度: 中等 标签: 思维, 二分
版权声明
思路:
代码:
#include <iostream>
#include<iostream>
#include <cmath>
using namespace std;
int main()
{int a,b;cin>>a>>b;int result = pow(a,1.0/b)*1000;cout<<result;return 0;
}
思路:
二分
代码如下:
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
bool check(double a,double b,double k)
{double res = 1;for(int i = 1 ; i <= b ; i++){res *= k;}if(res < a)return true;elsereturn false;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int a,b;cin >> a >> b;double l = 0 , r = 1001;while(r - l > 1e-9){double mid = (l + r) / 2;if(check(a,b,mid)){l = mid; } else{r = mid;}} int ans = r * 1000;cout << ans;return 0;
}