试图理解调车场算法

Trying to understand the Shunting Yard Algorithm

我正在尝试做 Shunting-yard algorithm 所以我开始研究它。这样做的时候,我发现了一些我不太理解的有趣文档:

    // Current token is a number, push 
    // it to stack for numbers. 
    else if(isdigit(tokens[i])){ 
        int val = 0; 

        // There may be more than one 
        // digits in number. 
        while(i < tokens.length() && 
                    isdigit(tokens[i])) 
        { 
            val = (val*10) + (tokens[i]-'0'); 
            i++; 
        } 

        values.push(val); 
    } 

我不明白为什么在while里面,变量val要乘以10(val=(val*10))。谁能帮我理解为什么算法必须这样做?

否则您只需添加数字即可。比如说你想要 123:你得到 1,乘以 10 得到 10,加上 2 得到 12,乘以10得到120,然后加上3得到123.

如果您省略 10 的乘法运算,您只会得到 1 + 2 + 3 == 6