gpt4 book ai didi

c++ - 在计算过程中将 int 类型转换为 long long 有什么好处?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:07 25 4
gpt4 key购买 nike

我通过以下函数得到了错误的答案

vector<int> repeatedNumber(const vector<int> &A) {
int n = A.size();
long long linear_sum = 0,square_sum = 0;
int i = 0;
for(;i<n;i++){
linear_sum += A[i]; //LINE 1
square_sum += A[i]*A[i]; //LINE 2
}
linear_sum = linear_sum - (n*(n+1))/2;
square_sum = square_sum - (n*(n+1)*(2*n+1))/6;
square_sum /= linear_sum;
vector<int> ans;
ans.push_back((linear_sum+square_sum)/2);
ans.push_back((-linear_sum+square_sum)/2);
return ans;
}

但是当我将 LINE 1 和 LINE 2 替换为:

linear_sum += (long long)A[i];          
square_sum += (long long)A[i]*(long long)A[i];

我得到了正确的答案。为什么只需将 int 类型转换为 long long 就可以解决问题。

最佳答案

当你将两个 int 相乘时values 结果计算为 int .

如果相乘后的值对于 int 来说太大了你会得到“未定义的行为”(在大多数常见的硬件中你只会得到一个看似随机的结果)。

例如33554432 (即 1<<25 == 225)对于 32 位整数是可以的,但它的平方 1125899906842624 (即 250)不是。

转换为 long long计算乘法之前的项,您希望扩大正确完成计算的范围。

这些问题在原生提供任意精度整数的语言(如 Python 或 Lisp)中不存在。

注意 int 是可能的和 long long大小确实相同(您只能确定 long long小于 int)。

关于c++ - 在计算过程中将 int 类型转换为 long long 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30630643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com