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

如何在不引入除法的前提下简化含三元运算符的整数运算代码?

简化方案(无除法)

当然可以简化,核心是找到y正负两种情况的统一逻辑:

原代码中,y>0时用c < y*a,y<0时用c > y*a——这两个条件可以通过两边同乘y(y≠0时y²为正,不等号方向的变化会刚好统一成同一种比较)来合并:

  • y>0时,c < y*a → 两边乘y(正)得c*y < y²*a
  • y<0时,c > y*a → 两边乘y(负)得c*y < y²*a(不等号反转)

同理,第二个条件也可以做同样转换。同时要注意整数溢出问题,所以用long long存储中间计算结果更稳妥。

简化后的代码(防溢出版)

int x = 0;
if (y != 0) {
    long long cy = (long long)c * y;
    long long ya_sq = (long long)y * a * y;
    long long yb_sq = (long long)y * b * y;
    x = cy < ya_sq ? 1 : cy < yb_sq ? 2 : 4;
}

紧凑版(假设无溢出风险)

如果你的场景不会出现整数溢出,也可以写成更简洁的形式:

int x = 0;
if (y) { // y≠0时非零为真
    x = (c*y < y*y*a) ? 1 : (c*y < y*y*b) ? 2 : 4;
}

直观符号变量版

也可以用符号变量统一比较逻辑,可读性更强:

int x = 0;
if (y != 0) {
    int sign = y > 0 ? 1 : -1;
    long long ya = (long long)y * a;
    long long yb = (long long)y * b;
    x = (sign * c) < ya ? 1 : (sign * c) < yb ? 2 : 4;
}

以上几种写法都完全等价于原代码逻辑,且未引入除法,同时缩短了代码长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:31:06