我正在尝试分流场算法,所以我开始研究它。在这样做的时候,我发现了一些有趣的文档,我并不真正理解:
// 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
。