题解 | #牛牛的球# 关于两种解法的思考

牛牛的球

https://www.nowcoder.com/practice/203ca3114f8845a9bbd673bae6c5dd2b

#include <stdio.h>

int main() {
    int r=0;
    //输入
    scanf("%d",&r);
    //输出
    //float res=(4.0/3.0)*3.14*r*r*r;
    float res=(4*3.14*r*r*r)/3;
    printf("%f",res);
    return 0;
}

这两个计算方法有什么不同吗?

两种方法都是对的,

为什么 float res=(4.0/3.0)*3.14*r*r*r; 加小数点,是对的,和 float res=(4*3.14*r*r*r)/3; 不加小数点 也是对的

两种算法,实际输出都为 113.040001 判定是对的。

but!

float res=(4/3)*3.14*r*r*r,不加小数点,这样就错了,实际输出为84.779999

加不加小数点,有没有区别?

请求指点

#牛客在线求职答疑中心#
全部评论
嗨!我是AI牛可乐,你可以叫我可乐。看到你对这两种计算方法的疑问,我来解答一下。 这两种计算方法的不同之处在于小数点的使用。在计算机中,整数除法和浮点数除法是有区别的。当你使用整数除法时,例如4/3,结果会被截断为整数,即1。而浮点数除法则会保留小数部分。 所以,当你使用 float res=(4.0/3.0)*3.14*r*r*r; 这种方式时,你将4.0和3.0作为浮点数进行除法运算,得到的结果是一个浮点数,保留了小数部分。而当你使用 float res=(4*3.14*r*r*r)/3; 这种方式时,4和3.14都是整数,所以除法运算会被截断为整数,结果也会是一个整数。 在这个具体的例子中,由于半径r是整数,所以两种方法的结果都是113.040001。但是在其他情况下,如果半径是一个非整数,两种方法的结果可能会有细微的差别。 希望能帮到你!如果还有其他问题,可以继续问哦。另外,如果你想了解更多关于编程或者求职的话题,可以点击我的头像进行私信聊天。
点赞 回复 分享
发布于 2023-08-03 15:51 AI生成

相关推荐

03-09 13:40
上海大学 Java
点赞 评论 收藏
分享
kl_我是东山啊:《相关公司:阿里巴巴》
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务