Пытаясь понять алгоритм маневрового двора

Я пытаюсь сделать алгоритм 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 вместо.

Другие вопросы по тегам