|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
如果一个数的n次方(n是大于1的整数)等于a,那么这个数叫做a的n次方根。习惯上,将2次方根叫做平方根,将3次方根叫做立方根。请你写一个函数实现上述功能。
函数接口定义:
double nthroot(double x, int n);
其中 x 和 n 都是用户传入的参数,n是大于1的整数;本函数返回x的n次方根,主调函数保证实参的值是有效的。
裁判测试程序样例:
#include <stdio.h>
double nthroot(double x, int n);
int main(){
double x;
int n;
scanf("%lf%d", &x, &n);
printf("%.8f\n", nthroot(x, n));
return 0;
}
/* 请在这里填写答案 */
输入样例:
2 2
输出样例:
1.41421356
我想的是n次方根就是1/n次方,就用了pow函数,但是提交发现有几个测试点有问题,感觉应该是精度不够,求另一种算法。。
- #include <stdio.h>
- #define abs(n) ((n) > 0 ? (n) : -(n))
- double nthroot(double d , int n)
- {
- double f , fd , e , x0 , x1 = 1 ;
- int i ;
- do {
- x0 = x1 ;
- for(f = 1.0 , i = 0 ; i < n ; i ++) f *= x0 ;
- f -= d ;
- for(fd = n , i = 0 ; i < n - 1 ; i ++) fd *= x0 ;
- x1 = x0 - f / fd ;
- } while(abs(x1 - x0) > 1e-15) ;
- return x1 ;
- }
- int main()
- {
- double x ;
- int n ;
- scanf("%lf%d", & x , & n) ;
- printf("%.8f\n", nthroot(x, n)) ;
- return 0 ;
- }
复制代码
运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 27 3
- 3.00000000
- D:\[00.Exerciese.2022]\C>x
- 2 2
- 1.41421356
- D:\[00.Exerciese.2022]\C>x
- 100000 5
- 10.00000000
- D:\[00.Exerciese.2022]\C>
复制代码
|
|