为什么这里需要显式类型转换?

Why explicit typecasting is required here?

为什么我们明确需要在乘法中将 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 为什么会这样?

因为nint类型,所以n * n也是int类型。 C++中没有"dynamic widening"。

写入 1LL * n * n 会强制将 n 隐式转换为 long long 类型。

最后,请注意即使 100000 也可能 对于 int - std::numeric_limits<int>::max() 可能小到 32767 来说太大了。如果您希望您的代码 可移植 您需要编写 long n = 100000; 和给定的 t 的表达式。