2017-06-14 50 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對你有幫助嗎?如果是這樣,請考慮將其標記爲答案。它不僅會獎勵解決方案的作者,還會幫助其他人。更何況,當有人在看待未解決的問題時,你的問題仍然在彈出並浪費其他時間。這對那些試圖解決你的問題的人來說是不公平的。 –

相關問題