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

求链式计算的最快实现方法(按左到右忽略运算优先级)

实现严格左到右计算的高效Calc方法

需求回顾

给定字符串形式的链式计算表达式(示例:string input = "14 + 2 * 32 / 60 + 43 - 7 + 3 - 1 + 0 * 7 + 87 - 32 / 34",最大10MB),调用int Calc(string sInput)需返回正确结果。计算规则:

  • 严格从左到右逐个数运算,忽略乘除优先级(例如14 + 2 * 32结果为(14+2)*32=512)
  • 仅支持+、-、*、/四种运算,且除法结果为整数(题目保证除法无小数、除数不为0)

高效实现思路

因为要处理最大10MB的字符串,必须避开内存密集型操作(比如Split拆分字符串会生成大量子串,内存开销极大)。我们直接通过索引定位数字和运算符,逐段解析计算,全程几乎无额外内存分配:

  1. 先解析第一个数字作为初始结果
  2. 循环定位后续的运算符和数字:
    • 找到位于两个空格之间的运算符
    • 定位下一个数字的起始与结束位置
    • 将数字字符串解析为整数,结合当前运算符更新结果
  3. 重复直到遍历完整个表达式

完整C#实现代码

public static int Calc(string sInput)
{
    if (string.IsNullOrWhiteSpace(sInput))
        return 0;

    int currentIndex = 0;
    // 解析第一个数字
    int spaceIndex = sInput.IndexOf(' ', currentIndex);
    int result = int.Parse(sInput.Substring(currentIndex, spaceIndex - currentIndex));
    currentIndex = spaceIndex + 1;

    while (currentIndex < sInput.Length)
    {
        // 获取运算符
        char op = sInput[currentIndex];
        currentIndex += 2; // 跳过运算符和后续空格

        // 获取下一个数字
        spaceIndex = sInput.IndexOf(' ', currentIndex);
        int num;
        if (spaceIndex == -1)
        {
            // 处理最后一个无后续空格的数字
            num = int.Parse(sInput.Substring(currentIndex));
            currentIndex = sInput.Length;
        }
        else
        {
            num = int.Parse(sInput.Substring(currentIndex, spaceIndex - currentIndex));
            currentIndex = spaceIndex + 1;
        }

        // 严格左到右执行运算
        switch (op)
        {
            case '+':
                result += num;
                break;
            case '-':
                result -= num;
                break;
            case '*':
                result *= num;
                break;
            case '/':
                // 题目保证除法合法,无需额外判断
                result /= num;
                break;
        }
    }

    return result;
}

性能优化说明

  • 避免了Split操作,直接用IndexOf定位空格,减少内存分配,适配超大字符串场景
  • 仅在必要时创建短子串用于解析整数,内存开销可控
  • 循环逻辑简洁直接,无冗余计算,执行效率拉满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:05