试图理解调车场算法
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
。
我正在尝试做 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
。