【问题标题】:In c++ using the ceil a division is not working?在使用 ceil 的 c++ 中,除法不起作用?
【发布时间】:2015-10-22 04:21:49
【问题描述】:

我试过这个 它不起作用 在 C++ 中使用 ceil

int n, m, a;
double r1, r2;
cin >> n;
cin >> m;
cin >> a;
r1 = (n/a);
r2 = (m/a);
cout << (ceil(r1)*ceil(r2));

在 n = 3 和 a =2 的情况下,n/a 操作应返回双精度值,但它不会

还有..

m/a 操作在 m = 3 和 a =2 的情况下应返回双精度值,但它不会

【问题讨论】:

  • the n/a operation shall return a double 不,不应该。 n/a 执行整数除法:结果是整数,向零截断。 m/a 也是如此。让它r1 = double(n) / a;

标签: c++ math int


【解决方案1】:

问题来了, n/am/a 将计算为整数,因为 n,m,a 是整数,并且整数将存储到 double 中,为避免这种情况,您可以像这样键入 cast

r1=(double)n/a;
r2=(double)n/a;

或者干脆将a的数据类型从int改为double, 也许(它会帮助你#A. Theatre Square)

【讨论】:

    【解决方案2】:

    由于 nma 都是 int 类型,n/am/a 也将是整数,这意味着 3/2 将等于 1。更改 nm 输入double 应该可以解决这个问题。

    【讨论】:

    • 是的,改成双倍可以解决问题,但我做不到。在问题中是不允许的。此外,即使 n 和 a 都是整数,除法也可以是双精度数,因为我没有将它存储在 int 变量中,它不应该将其转换为 int 对吗?
    • 即使您将其存储为双精度数,它们也会返回一个整数。如果 n 和 m 必须是整数,您可以随时尝试将其转换为双精度数。 r1 = double(n/a);
    • 我觉得应该是没有()
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    相关资源
    最近更新 更多