C - 求一个数的立方根

标签 c double decimal math.h

在我的一项作业中,我应该获得 x^2、x^4 和 x 的立方根的值,其中 x 的范围是 0 - 100。到目前为止,我已经有了这个。 (用5个数字进行测试)

#include <stdio.h>
#include <math.h>

int powers(int n)
{
    return (n < 0) || (powers(n-1) && printf("%d\t%d\t%d\t\t%d\n", n, n*n, n*n*n*n, cbrt(n)));
}

int main(void)
{
    printf("number\tx^2\tx^4\t\tx^(1/3)\n");
    powers(5);

    return 0;
}

我的输出

number    x^2    x^4        x^(1/3)
0         0      0          0
1         1      1          0
2         4      16         -108170613
3         9      81         1225932534
4         16     256        -1522700739
5         25     625        -1124154156

所以,我的平方和四次方工作起来很简单,但我无法使用立方根。当我单独做立方根时它起作用了。 printf("125 的立方根为 %f\n, cbrt(125)); 得出125 的立方根为 5.0000

我需要帮助来了解为什么它在我的函数中不起作用。 C 编程新手,请多多关照。 (编译器:Borland C++ 和 IDE:C-Free 5.0)

最佳答案

问题是 cbrt 接受并返回 floatdouble 值,这意味着 cbrt(n) code> 会在将 n 传递给函数之前自动将其转换为 float/double。该函数将返回一个 float/double 但您没有将其存储在任何地方以强制转换回 int,而是直接传递它到 printf 指定 %d,因此该值被解释为 int,即使它实际上是 float/

一个简单的转换就足够了:(int)cbrt(n),或者您可以使用%f%g说明符和将其打印为真实类型。

同样存储在临时变量中也会导致相同的转换行为:

int v = cbrt(n);
printf("%d\n", v);

关于C - 求一个数的立方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376704/

相关文章:

c - strcat() 函数实际上是如何工作的及其替代方法

c++ - 从 sql 类型 decimal(20,8) 转换为 c++ double

c# - 如何将小数值显示为小数点后两位?

javascript - 计算三 Angular 形 Angular 时的小数舍入问题

c - 为什么我们不能将取消引用的指针传递给指针?

c++ - Linux 中 C++ 代码留下的文件句柄

C - 如何确定位的存储方式

java - Android 除法始终结果为 0

Java获取 double 的前2位小数

用于存储差异很大的数值的 MySQL 结构