鱼C论坛

 找回密码
 立即注册
查看: 3197|回复: 4

[已解决]关于求一个double类型的数的n次方根问题

[复制链接]
发表于 2022-11-10 15:28:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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函数,但是提交发现有几个测试点有问题,感觉应该是精度不够,求另一种算法。。
最佳答案
2022-11-10 19:33:22
  1. #include <stdio.h>

  2. #define abs(n) ((n) > 0 ? (n) : -(n))

  3. double nthroot(double d , int n)
  4. {
  5.         double f , fd , e , x0 , x1 = 1                         ;
  6.         int i                                                   ;
  7.         do {
  8.                 x0 = x1                                         ;
  9.                 for(f = 1.0 , i = 0 ; i < n ; i ++) f *= x0     ;
  10.                 f -= d                                          ;
  11.                 for(fd = n , i = 0 ; i < n - 1 ; i ++) fd *= x0 ;
  12.                 x1 = x0 - f / fd                                ;
  13.         } while(abs(x1 - x0) > 1e-15)                           ;
  14.         return x1                                               ;
  15. }

  16. int main()
  17. {
  18.         double x                                                ;
  19.         int n                                                   ;
  20.         scanf("%lf%d", & x , & n)                               ;
  21.         printf("%.8f\n", nthroot(x, n))                         ;
  22.         return 0                                                ;
  23. }
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 27 3
  4. 3.00000000

  5. D:\[00.Exerciese.2022]\C>x
  6. 2 2
  7. 1.41421356

  8. D:\[00.Exerciese.2022]\C>x
  9. 100000 5
  10. 10.00000000

  11. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-10 16:17:02 | 显示全部楼层
         开平方可以使用牛顿迭代法,计算方法非常简单,但是,这种方法只适合求取平方根。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-10 16:58:12 | 显示全部楼层
哪几个测试点有问题?
输入了什么?正确的结果是什么?你的程序给出的结果是什么?
不知道这几个问题的答案,你怎么调试程序?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-10 19:33:22 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

  2. #define abs(n) ((n) > 0 ? (n) : -(n))

  3. double nthroot(double d , int n)
  4. {
  5.         double f , fd , e , x0 , x1 = 1                         ;
  6.         int i                                                   ;
  7.         do {
  8.                 x0 = x1                                         ;
  9.                 for(f = 1.0 , i = 0 ; i < n ; i ++) f *= x0     ;
  10.                 f -= d                                          ;
  11.                 for(fd = n , i = 0 ; i < n - 1 ; i ++) fd *= x0 ;
  12.                 x1 = x0 - f / fd                                ;
  13.         } while(abs(x1 - x0) > 1e-15)                           ;
  14.         return x1                                               ;
  15. }

  16. int main()
  17. {
  18.         double x                                                ;
  19.         int n                                                   ;
  20.         scanf("%lf%d", & x , & n)                               ;
  21.         printf("%.8f\n", nthroot(x, n))                         ;
  22.         return 0                                                ;
  23. }
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 27 3
  4. 3.00000000

  5. D:\[00.Exerciese.2022]\C>x
  6. 2 2
  7. 1.41421356

  8. D:\[00.Exerciese.2022]\C>x
  9. 100000 5
  10. 10.00000000

  11. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-10 22:38:27 | 显示全部楼层

正确了!!谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 07:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表