2015-07-01 93 views
-1

任何人都可以向我解釋爲什麼下面的程序的輸出,如果你輸入的值:5,222,2043,29,2,20035是22222?我試圖在紙上解決它,我只是無法得到這個結果。For循環內While循環的代碼解釋

#include <iostream> 
using namespace std; 

int n=0; 
int x=0; 
int s=0; 
int i=1; 


int main() { 
    cin >> n; 
    for(i=1; i<=n; i++) { 
     cin >> x; 
     int nr=1; 
     while(x>9) { 
      nr=nr*10; 
      x=x/10; 
     } 
     s=s+x*nr; 
    } 
    cout << s; 
    return 0; 
} 
+0

那麼,給定'x',你最終會得到什麼'x * nr'? – Barry

+2

單步調試? –

+1

你知道你可以用你的調試器遍歷代碼,看看每個步驟在做什麼。這是一個非常有用的工具。 – NathanOliver

回答

1

您的while循環每次將x除以10。而且,由於您正在處理整數,所以只能將十進制數字右移一位:7234 -> 723。 直到它小於10,或者換句話說,剩下一個(第一個)數字:7.然後它再次乘以10 ^(時間除以10):7000.
這意味着代碼在你的for循環中增白,除了每個x中的第一個數字都爲零。所以最後你會得到:200 + 2000 + 20 + 2 + 20000

+0

非常感謝! – Flav