You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用modulo取模运算时触发SIGFPE算术异常问题求助

错误原因
  • 核心问题是取模运算的下标使用错误
    你代码中int temp = j % newArr[j][2];里的j是遍历区间[start, end]的数值,不是当前测试用例的索引。你当前处理的是第i组测试用例,作为除数的K应该取newArr[i][2],而非newArr[j][2]。
    j的取值很容易超过newArr的最大有效下标99,触发数组越界访问,读到的随机内存值如果为0,C语言中对0做取模运算会直接触发SIGFPE算术异常。而JS中对0取模只会返回NaN不会导致程序崩溃,所以相同逻辑在JS中可以运行,在C中直接报错。
  • 次要问题:你定义arr数组时末尾的301n]不符合C语言语法规则,同时你写死循环处理100个测试用例,没有读取arr[0]存储的实际测试用例数量,也会带来潜在的越界风险。
修复方法

首先修正取模行的下标即可解决崩溃问题:

// 把错误的newArr[j][2]改为newArr[i][2]
int temp = j % newArr[i][2];

如果要优化性能,不需要遍历区间内的所有数字,可以直接用数学公式计算结果,时间复杂度从O(n)降到O(1):

int K = newArr[i][2];
if (K == 0) {
    // 处理K为0的非法输入情况
    result = 0;
} else {
    result = end / K - (start - 1) / K;
}

你可以直接用这段代码替换原来的j循环部分,运行效率更高。

内容的提问来源于stack exchange,提问作者Muhammad Rifqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:06:07