直接使用 cout 打印答案会给出错误的答案,而存储答案然后使用 cout 打印会被接受 [已关闭]

Printing answer directly using cout gives wrong answer, whereas storing the answer and then printing using cout get accepted [closed]

提问人:tarungaur 提问时间:7/16/2023 最后编辑:πάντα ῥεῖtarungaur 更新时间:7/16/2023 访问量:58

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

4个月前关闭。

我正在解决问题 1A:Codeforces 上的剧院广场(https://codeforces.com/problemset/problem/1/A)。

首都伯兰的剧院广场呈矩形,大小为×米。在城市周年纪念日之际,决定用方形花岗岩石板铺设广场。每块石板的大小为× a。

铺设广场所需的最少石板数量是多少?它被允许覆盖比剧院广场更大的表面,但广场必须被覆盖。不允许打破石板。石板的侧面应与广场的侧面平行。

输入: 输入在第一行包含三个正整数:n、m 和 a(1 ≤ n、m、a ≤ 10^9)。

输出: 写下所需的石板数量。

以下代码不起作用,当我直接使用以下方式打印答案时:cout

#include <bits/stdc++.h>

using namespace std;

int main() {
    long long n, m, a;

    cin >> n >> m >> a;

    cout << (ceil(double(n) / a) * ceil(double(m) / a)) << endl;    
    return 0;
}

但是当我存储答案然后打印它时有效:

#include <bits/stdc++.h>

using namespace std;

int main(){
    long long n, m, a, number;

    cin >> n >> m >> a;

    number = (ceil(double(n) / a) * ceil(double(m) / a));    
    cout << number << endl;

    return 0;
}

请帮助我理解为什么在第一种情况下,对于以下输入,它会给出错误的答案:

n = m = 10^9 ; a = 1
C++ 整数溢出 CEIL

评论

0赞 Md. Faisal Habib 7/16/2023
它为WA提供了哪个测试用例?
5赞 fabian 7/16/2023
您在一种情况下打印 a,在另一种情况下打印 a。你根本不应该在这里使用浮点运算。doublelong long
6赞 infinitezero 7/16/2023
当我们使用它时,请阅读以下内容:为什么我不应该包含 bits/stdc++.h为什么使用命名空间 std 被认为是不良做法
8赞 Some programmer dude 7/16/2023
请不要使用此类网站来学习编程或编程语言,这不是它们的目的。如果你真的想学习C++,那么请先投资一些好书来正确地学习它。
3赞 PaulMcKenzie 7/16/2023
@tarungaur -- 不要使用浮点函数或值来解决基于整数的问题。这是底线。如果你发现自己使用 、 等来解决一个完全基于整数的问题,那么你想出的任何答案(几乎)都会自动无效。ceil()pow()double

答:

3赞 Chris 7/16/2023 #1

如前所述,在第一种情况下,您使用的是 which 返回 a 并打印该类型的值。在第二种情况下,您将该值分配给整数类型的变量,然后打印该值。std::ceildoubledoublelong longlong long

不应期望两者打印相同。