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

如何修正仅支持千位以上输入的C++末位为50取整算法?

修正后的C++算法实现

问题根源分析

原算法核心错误在于错误地以100为单位划分区间并判断进位逻辑,仅在输入值≥1000的部分场景下巧合符合规则,本质逻辑与你定义的匹配规则完全不符:

  • 对输入701.272执行701.272/100=7.01272时,因小数部分<0.5将整数部分加1为8,最终得到8*100+50=850,违背了「[700,750]区间返回750」的要求。
  • 即使对于≥1000的输入(如1120),原算法也会错误返回1250而非规则要求的1150。

正确逻辑梳理

根据你定义的规则,末位为50的匹配值(50、150、250...)的区间划分可统一为:

  • 输入值落在[50*(2n+1), 50*(2n+2))(n为整数)时,返回50*(2n+1)(例:[1050,1100)返回1050)
  • 输入值落在[50*(2n+2), 50*(2n+3)]时,返回50*(2n+3)(例:[1100,1150]返回1150)

修正后的算法步骤

  1. 将输入的float值除以50.0,得到浮点数值
  2. 提取该数值的整数部分
  3. 判断整数部分的奇偶性:
    • 若为奇数:直接返回「50 × 整数部分」
    • 若为偶数:返回「50 × (整数部分 + 1)」

C++代码实现

float getNearest50(float input) {
    float val = input / 50.0f;
    int int_val = static_cast<int>(val);
    // 处理刚好等于50*(奇数)的边界情况(如1150=50*23)
    if (val == static_cast<float>(int_val) && int_val % 2 == 1) {
        return 50.0f * int_val;
    }
    return (int_val % 2 == 1) ? 50.0f * int_val : 50.0f * (int_val + 1);
}

测试验证

  • 输入701.272 → 701.272/50=14.02544,整数部分14为偶数 → 返回50*(14+1)=750(正确)
  • 输入1060 → 1060/50=21.2,整数部分21为奇数 → 返回50*21=1050(正确)
  • 输入1120 → 1120/50=22.4,整数部分22为偶数 → 返回50*(22+1)=1150(正确)
  • 输入1150 → 1150/50=23,整数部分23为奇数 → 返回50*23=1150(正确)
  • 输入50 → 50/50=1,整数部分1为奇数 → 返回50*1=50(正确)
  • 输入100 → 100/50=2,整数部分2为偶数 → 返回50*(2+1)=150(正确)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:22:03