为什么我们显式地需要将int
转换为long long
?
t=(long long)n*(long long)n
给出正确答案,但
t=n*n
给出了错误的答案:
#include <iostream>
using namespace std;
int main() {
int n=100000;
long long int t;
t=(long long)n*(long long)n;
//t=n*n (This gives wrong answer)
printf("%lld",t);
return 0;
}
t=(long long)n*(long long)n
给出10000000000
在哪里
t=n*n
给出1410065408
为什么会这样?
答案 0 :(得分:4)
因为n
是int
类型,所以n * n
也是int
类型。 C ++中没有“动态扩展”。
写入1LL * n * n
会强制将n
转换为long long
类型。
最后,请注意,即使100000
对于int
-std::numeric_limits<int>::max()
来说也可能太大,也可能小到32767。如果您想让代码要是便携式,您需要编写long n = 100000;
和给定t
的表达式。