2015-05-03 75 views
-1

我有一個工作代碼,但我不太明白它是如何工作的,我知道它的含義和使用,但我不明白它是如何工作的。有人可以解釋我這個代碼的工作原理嗎? (迴文C++)

#include <iostream> 
#include <string> 
using namespace std; 
int main(int argc, char* argv[]) 
{ 
    int n, num, digit, rev = 0; 
    cout << "Enter a positive number: "; 
    cin >> num; 
    n = num; 
    do 
    { 
     digit = num%10; 
     rev = (rev*10) + digit; 
     num = num/10; 
    }while (num!=0); 
    cout << " The reverse of the number is: " << rev << endl; 
    if (n==rev) 
     cout << " The number is a palindrome"; 
    else 
     cout << " The number is not a palindrome"; 

    return 0; 
} 

我不明白這個部分:

 do 
    { 
     digit = num%10; 
     rev = (rev*10) + digit; 
     num = num/10; 
    }while (num!=0); 

回答

2

這通過迭代的num數字反轉num。對於每個數字,它將其添加到rev的右側。

digit = num%10; // Find the 1s digit of num 
rev = (rev*10) + digit; // Push digit to the right of rev 
num = num/10; // Remove the 1s digit of num 

num = 123一個例子演練:

d = 0, r = 0, n = 123. 

d = 3 // 123%10 
r = 3 // 0*10 + 3 
n = 12 // 123/10 

d = 2 // 12%10 
r = 32 // 3*10+2 
n = 1 // 12/10 

d = 1 // 1%10 
r = 321 // 32*10+1 
n = 0 // 1/10 

而且321確實的123相反。

+0

謝謝,幫助了我很多,現在我可以理解它是如何工作的! – qwerasdzxc

0

讓我們重新排序一下,現在忘記循環。

digit = num%10; 
num = num/10; 
rev = (rev*10) + digit; 

如果你輸入1234,num是1234循環之前,和rev爲0

第一行讓你的1234 4(模,一個除法的餘數)。

你將num除以10,通常爲123.4,但它是一個int,所以只有123.這兩行基本上刪除num的最後一個數字(並將其存儲在數字中)。

最後一行簡單地將數字「連接」到rev。
如果rev是123 digit是4,you'll得到123*10+4=1234

於是,想起​​了循環:數字是從num結束拍攝並在rev而不是放在最後。直到沒有num了。

相關問題