CODEFORCES:A. Theatre Square

不知道是哪一天突然心血来潮想做做题目了,so,来到了CODEFORCES做题目试试。

首先做的自然是最简单的,也就是A. Theatre Square看了下题目便开始做起来了,感觉没什么难度,但后面问题就出现了。。。。

最初想法:假设在水平上有i个,竖直方向上有j个,那么只要使i*a >= m && j * a >= n,那么(i * j)即为所求。

#include<stdio.h>
int main(void)
{
	int m, n, a;
	int i = 1, j = 1;       
	scanf("%d %d %d",&m, &n, &a);
	while(i * a <  m)
	{
		i++;
	}
	while(j * a < n)
	{
		j++;
	}
	printf("%d\n", i * j);
	return 0;
}
但提交上去却出现了问题(注:我刚开始并不知道CODEFORCES上面可以查看你的错误在哪里,是在后来才发现的,要是早知道就好了)。

然后我就开始看题目了,果然出现的是一般错误(当然,当时只是我的猜测,但事实证明我猜对了),就是取值范围的问题:

The input contains three positive integer numbers in the first line: n,  m and a (1 ≤  n, m, a ≤ 109).

也就是说它的n, m, a的取值都可能达到10^9也就是2^30左右,因此想到了使用long类型

#include<stdio.h>
int main(void)
{
    long m, n, a;
    long i = 1, j = 1;       
    scanf("%ld %ld %ld",&m, &n, &a);
    while(i * a <  m)
    {
        i++;
    }
    while(j * a < n)
    {
        j++;
    }
    printf("%ld\n", i * j);
    return 0;
}
但还是发生了错误,那么会是那里发生了错误呢?

脑袋拍一下

哦,应该是在(i * j)越界了,(i * j)的范围应该在10^18次方,那么这个我用什么来表示呢?我记得以前好像有个(long long)的类型,好像就可以表示。

百度搜了一下,还真有,那么,就不客气了。

#include<stdio.h>
int main(void)
{
    long m, n, a;
    long i = 1, j = 1;       
    scanf("%ld %ld %ld",&m, &n, &a);
    while(i * a <  m)
    {
        i++;
    }
    while(j * a < n)
    {
        j++;
    }
    printf("%I64d\n", (long long)i * j);
    return 0;
}
就这样,ok了。(尽管如此,但要注意最后使用的提交是MS C++)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值