2015-05-03 162 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了。

相关问题