Пытаясь понять алгоритм маневрового двора
Я пытаюсь сделать алгоритм Shunting-ярда, поэтому я начал исследовать его. При этом я нашел интересную документацию, которую я не совсем понимаю:
// 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)
). Может кто-нибудь помочь мне понять, почему алгоритм должен это делать?
1 ответ
Решение
Потому что в противном случае вы просто добавили бы цифры. Скажем, например, вы хотите 123
: ты получаешь 1
умножить на 10
получить 10
, добавлять 2
получить 12
умножить на 10
получить 120
, затем добавьте 3
получить 123
,
Если вы пропустили умножение на 10
ты просто получишь 1 + 2 + 3 == 6
вместо.