【发布时间】:2020-06-03 09:34:43
【问题描述】:
这是代码中的三角形问题的代码,它给我一个算术溢出错误。
int solution(vector<int> &A) {
int i, n;
n=A.size();
sort(A.begin(), A.end());
for(i=0; i<n-2; i++)
{
if((A[i]+A[i+1]>A[i+2])&&(A[i]+A[i+2]>A[i+1])&&(A[i+1]+A[i+2]>A[i]))
{
return 1;
}
}
return 0;
}
它通过了所有测试,除了“extreme_arith_overflow1 溢出测试,3 MAXINTs”说代码返回 0 但它期望 1。有人知道如何解决这个问题吗?
【问题讨论】:
-
首先确保你没有超出你的向量范围。 (您将使用当前显示的代码执行此操作)其次,可能使用
unsigned int代替,(如果没有值可以是负数)或者可能是long long(或unsigned long long)用于 64 位类型?此外,您可能应该进行一些输入验证,以确保您读取的输入一开始就有效。 -
您将
A.size()存储在n中,然后循环直到i<n并访问A[i+2]。在错误情况下,这是A[A.size()]甚至A[A.size()+1]。超出范围。 -
@Someprogrammerdude 是的,谢谢我修复了越界问题并验证了输入:)