有人可以向我解释该代码的工作原理吗?(Palindrome C )

Can someone explain me how this code works? (Palindrome C++)

本文关键字:Palindrome 工作 可以向 解释 代码      更新时间:2023-10-16

我有一个工作代码,但我不太了解它的工作原理,我知道它的含义和使用,但我不明白它的工作原理。

#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);

这通过在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的相反。

让我们重新排序并暂时忘记循环。

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

如果您输入1234,则num在循环前为1234,而rev为0。

第一行可为您提供1234中的4个(Modulo,其余部分)。

you将num除以10,通常为123.4,但它是int,因此仅123。这两行基本上删除了NUM的最后一个数字(并将其存储在数字中)。

,最后一行简单地"串联"到rev的数字。
如果rev为123,而digit为4,则获得123*10+4=1234

因此,记住循环:数字是从num的末端拿走的,然后放在rev的末尾。直到不再有num