Boolean
“删除浮点异常”
“这是黑客的问题”
'1.删除浮点异常
2.请快速帮助'
问题:为什么我会出现浮点异常,该如何解决?
答案 0 :(得分:0)
if(1<=n<=100000)
是错误的。在C语言中,这种方法行不通。我的建议是通过编写以下语句来使用逻辑和语句(&&
):
if (1 <= n && n <= 100000)
您尝试将循环限制为n
行:for(int i=0;i<=n;i++)
,但应使用<
而不是<=
的符号。尝试使用:for (int i=0; i<n; i++)
将其限制为n
。
另外,当您将其限制为n
时,则不应使用arr[i+1]
或arr[i+2]
,因为您正在访问数组边界之外的值(从刚访问完内存之后数组)。这是该异常的原因。如果您有一些非零的垃圾,那么您的代码很可能不会有浮点异常。因为您在模运算中使用arr[i+1]
和arr[i+2]
,并且在某种程度上它们可能为零,所以根据标准,您可以具有未定义的行为。
尝试使用(根据您的代码;我不知道它的用途):
long long good_triplets(int *arr, int n) {
int count = 0;
if (3 <= n && n <= 100000) {
for (int i = 0; i < (n - 2); i++) {
if ((((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i]) == 0) &&
(((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 1]) != 0) &&
(((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 2]) != 0))
count = count + 6;
if ((((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 1]) == 0) &&
(((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i]) != 0) &&
(((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 2]) != 0))
count = count + 6;
if ((((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 2]) == 0) &&
(((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i + 1]) != 0) &&
(((arr[i] + arr[i + 1] + arr[i + 2]) % arr[i]) != 0))
count = count + 6;
}
}
return count;
}