之朝百 发表于 2020-8-6 09:06:33

两种计算方法有啥区别

如图,感觉没啥区别啊(虽然方法笨了点),第二种为啥输出0

zltzlt 发表于 2020-8-6 09:08:20

数据溢出了,需要先将 i 转化为 double 类型

qiuyouzhi 发表于 2020-8-6 09:09:56

pow函数的原型是:
double pow(double x,double y);
可以发现,返回值是double,所以用double类型的变量存储是没有问题的。
但是第二个,5个i相乘,最后返回的还是一个整数,而不是小数,所以会出问题。

baige 发表于 2020-8-6 09:16:45

加个1.0*在i前面就好,或者强制转换类型

之朝百 发表于 2020-8-6 09:22:42

zltzlt 发表于 2020-8-6 09:08
数据溢出了,需要先将 i 转化为 double 类型

啊这

zltzlt 发表于 2020-8-6 09:23:28

之朝百 发表于 2020-8-6 09:22
啊这

第 10 行改成 scanf("%f", &i);

永恒的蓝色梦想 发表于 2020-8-6 09:27:15

之朝百 发表于 2020-8-6 09:22
啊这

#include<stdio.h>

int main() {
    double i, result;

    printf("请输入一个整数:");
    scanf("%lf", &i);

    result = i * i * i * i * i;

    printf("%.0lf的五次方是:%.2lf", i, result);

    return 0;
}

永恒的蓝色梦想 发表于 2020-8-6 09:28:15

楼上所有的答案都忽略了一个关键的点:格式化 double 型数据应该用 %lf 。

之朝百 发表于 2020-8-6 09:29:32

zltzlt 发表于 2020-8-6 09:23
第 10 行改成 scanf("%f", &i);

还是不行

之朝百 发表于 2020-8-6 09:31:21

永恒的蓝色梦想 发表于 2020-8-6 09:28
楼上所有的答案都忽略了一个关键的点:格式化 double 型数据应该用 %lf 。

秀秀秀

zltzlt 发表于 2020-8-6 09:31:57

之朝百 发表于 2020-8-6 09:29
还是不行

发文本代码上来吧,方便帮你改{:10_266:}

baige 发表于 2020-8-6 09:32:32

然而并没有,这是重写的,上面的是int类型的

永恒的蓝色梦想 发表于 2020-8-6 09:34:08

zltzlt 发表于 2020-8-6 09:31
发文本代码上来吧,方便帮你改

我已经改完了{:10_266:}

之朝百 发表于 2020-8-6 09:35:00

baige 发表于 2020-8-6 09:32
然而并没有,这是重写的,上面的是int类型的

他回答的应该是将int i改成double i之后仍然存在的格式化问题

永恒的蓝色梦想 发表于 2020-8-6 09:36:16

baige 发表于 2020-8-6 09:32
然而并没有,这是重写的,上面的是int类型的

int 型默认调用 double 的 pow 函数。

之朝百 发表于 2020-8-6 09:41:23

zltzlt 发表于 2020-8-6 09:31
发文本代码上来吧,方便帮你改

谢谢大佬,不过这个 “ %lf ” 知识点扩展阅读里没找到{:10_266:}
页: [1]
查看完整版本: 两种计算方法有啥区别