【发布时间】:2019-03-10 06:21:55
【问题描述】:
首都伯兰的剧院广场呈长方形 尺寸为 n × m 米。值此建城周年之际, 决定用方形花岗岩铺设广场 石板。每块石板的大小为a × a。
铺设广场最少需要多少块石板?它是 允许覆盖比剧院广场更大的表面,但 广场必须被覆盖。不允许打破石板。 石板的边应与广场的边平行。
输入
输入在第一行包含三个正整数:
n, m and a (1 ≤ n, m, a ≤ 10^9).输入给定:
6 6 4输出
写下所需数量的石板。
#include<stdio.h>
#include<math.h>
int main(){
long long m, n, a;
scanf("%lld %lld %lld", &m, &n, &a);
long long req = ceil(m / a) * ceil(n / a);
printf("%lld", req);
}
它应该在第一个测试用例中给我4,但它给了我1。我看到了一个解决方案,人们使用int m, n, a 作为高于main() 的全局声明变量,在这种情况下,如果 10^18 在 4 字节全局声明变量中存储值(假设最后一个测试用例是非常大的数字)。或者当我们全局声明一个变量时是否有不同的规则?其中一些以main(m, n, a) 的身份传递,而没有在任何地方声明。
【问题讨论】:
-
故障案例中的值是多少?
-
请注意
m / a和n / a执行整数除法。 -
输入
1000000000 1000000000 1输出-2147483648 -
在我提到的第一种情况下,输入是
6 6 4 -
@newby
ceil(6/4)是 1,因为6/4是 1。这就是整数除法的工作原理,它将结果截断为整数。long long是一个整数。