大象喝水的问题为啥这样运行的结果不对啊

一只大象要喝 2020 升水才能解渴,但现在只有一个深 h 厘米,底面半径为 r厘米的小圆桶(h和 r 都是整数)。问大象至少要喝多少桶水才会解渴。

img

img

我给你看个示例,你就明白了:

/* elephantsDrinking.c -- 实现大象喝水 */
#include <stdio.h>
#include <math.h>
// 定义圆周率常量
#define PI 3.1415926

/*
    一只大象要喝 2020 升水才能解渴,但现在只有一个深 h 厘米,底面半径
    为 r 厘米的小圆桶(h 和 r 都为整数),问大象至少要喝多少桶水才会解渴?
*/
int main(void)
{
    // 定义整型变量 h, r
    int h, r;
    // 提示性输出
    printf("请输入小圆桶的高度和底面半径:");
    // 读取高和底面半径
    scanf("%d%d", &h, &r);
    // 计算体积,单位平方厘米
    double volume = PI * r * r * h;
    // 计算喝多少桶水的数量
    double num = 2020.0D / (volume / 1000000.0D);
    // 输出喝多少桶的数量
    printf("总共要喝%.0f桶\n", floor(num));

    return 0;
}

floor() 函数可以向下取整,但是返回的数也是一个 double 类型的浮点数。
使用整型变量接收其值会有精度丢失的风险,所以最后的结果不对
此外,你的 scanf() 函数的使用也有问题,你直接把参与也放进了字符串里,这是不对的,
可能导致程序代码无法运行,或运行有问题

img

Scanf那句改成 ("%d %d", &h,&r)

#include <stdio.h>
#include <math.h>
#define PI 3.14159

int main()
{
    int h, r, result;
    scanf("%d %d", &h, &r);
    double volume = PI * r * r * h;
    result = ceil(2020.0 / volume); // 向上取整 
    printf("%d", result);
    return 0;
}

这还是不行啊

img

img


#include<iostream>
using namespace std;
int main()
{
    int h,r,a;
    cin>>h>>r;
    a=2020/(3.14*r*r*h)+1;
    cout<<a;
    return 0;
}