十年 OI 一场空,不开 long long 见祖宗。
首先回顾一下上次 A+B 的代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b;
return 0;
}
这道题是要求输出 A*B,因此我们把 cout<<a+b;
改成 cout<<a*b;
即可。
...吗?
直接提交代码,会发现我们拿到了 90 分,在第 4 个点报错。
到底是怎么回事呢?
还记得之前提到的吗?整型代表变量能够处理正负 21 亿之内的整数。
但是这道题的 a 和 b 的范围达到了 5 万,相乘会变成 25 亿,这样会超出整型的限制。
那么怎么办呢?
C++ 中有一个 long long
型即长整型,可以处理 922 京(京=亿亿)之内的大数。因此这道题用 long long
完全足够。
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,b;
cin>>a>>b;
cout<<a*b;
return 0;
}
其实这道题出题人原本是想让我们用 unsigned int
,这也是一种数据类型,只能处理正数,但能到 42 亿。但 unsigned int
的数据范围可比 long long
小很多,所以如果不是空间限制较紧,还是使用 long long
。
练习题:P1401