2017-06-14 155 views
-3

为什么下面的代码在做operand * 10?为什么它不只是做operand = (expression[i] - '0');而不是operand = (operand*10) + (expression[i] - '0');为什么“操作数=(操作数* 10)+(表达式[i] - '0');”

else if(IsNumericDigit(expression[i]))  
{ 
    int operand = 0; 
    while(i<expression.length() && IsNumericDigit(expression[i])) 
    { 
     operand = (operand*10) + (expression[i] - '0'); 
     // why is he doing operand *10? 
     // example : if have a string 2 3 * 3 4 +. 
     // It is pushing 23 on stack rather than 2 and 3     
     i++; 
    } 
    i--; 

    S.push(operand); 
} 
+0

如果他做的操作数=(表达式[i] - '0')并且表达式为“123”,那么在while循环操作数为3之后123. – user1438832

+1

请编辑问题主体以包含实际问题。标题应该只是问题的简短摘要,评论应该在代码之外作为主要问题。还请添加一些上下文,并详细说明您不确定的内容。但首先请花一些时间[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。 –

+1

当然,这个想法是处理像42这样的大数字。呃,它应该退出while循环,因为''不是数字数字。你有没有试过调试它? – Rene

回答

0

因为它被告知。考虑你有2 3 4 5我你的表达阵列。那么你的代码operand = (operand*10) + (expression[i] - '0');将做以下操作:

operand = (0*10) + (2-0) 
operand = (2*10) + (3-0) 
operand = (23*10) + (4-0) 
operand = (234*10) + (5-0) 

所以最终你的操作将包含数2345。这是,如果你写数字向下纸张等。首先你写下2,然后你写下3。现在你有23和20 + 3相同。因此乘以10.

+0

你好,Aashish对你有帮助吗?如果是这样,请考虑将其标记为答案。它不仅会奖励解决方案的作者,还会帮助其他人。更何况,当有人在看待未解决的问题时,你的问题仍然在弹出并浪费其他时间。这对那些试图解决你的问题的人来说是不公平的。 –