肖恩的n次根
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;
else
return 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;
}