C++ 有人能解释一下这个代码是如何工作的吗?(回文C+;+;)

C++ 有人能解释一下这个代码是如何工作的吗?(回文C+;+;),c++,palindrome,C++,Palindrome,我有一个工作代码,但我不太明白它是如何工作的,我知道它的意义和用途,但我不明白它是如何工作的 #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 >

我有一个工作代码,但我不太明白它是如何工作的,我知道它的意义和用途,但我不明白它是如何工作的

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

这通过迭代
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

的反面,它通过迭代
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

的反面,它通过迭代
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

的反面,它通过迭代
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(模,除法的余数)

您将num除以10,通常是123.4,但它是一个
int
,所以只有123。这两行基本上删除了num的最后一个数字(并将其存储在digit中)

最后一行只是将数字“连接”到rev.
如果
rev
为123,而
digital
为4,则将得到
123*10+4=1234


因此,记住循环:数字取自
num
的末尾,放在
rev
的末尾。直到不再有
num

让我们对它重新排序一点,暂时忘记循环

digit = num%10;
num = num/10;
rev = (rev*10) + digit;
如果输入1234,
num
在循环之前为1234,
rev
为0

第一行得到1234中的4(模,除法的余数)

您将num除以10,通常是123.4,但它是一个
int
,所以只有123。这两行基本上删除了num的最后一个数字(并将其存储在digit中)

最后一行只是将数字“连接”到rev.
如果
rev
为123,而
digital
为4,则将得到
123*10+4=1234


因此,记住循环:数字取自
num
的末尾,放在
rev
的末尾。直到不再有
num

让我们对它重新排序一点,暂时忘记循环

digit = num%10;
num = num/10;
rev = (rev*10) + digit;
如果输入1234,
num
在循环之前为1234,
rev
为0

第一行得到1234中的4(模,除法的余数)

您将num除以10,通常是123.4,但它是一个
int
,所以只有123。这两行基本上删除了num的最后一个数字(并将其存储在digit中)

最后一行只是将数字“连接”到rev.
如果
rev
为123,而
digital
为4,则将得到
123*10+4=1234


因此,记住循环:数字取自
num
的末尾,放在
rev
的末尾。直到不再有
num

让我们对它重新排序一点,暂时忘记循环

digit = num%10;
num = num/10;
rev = (rev*10) + digit;
如果输入1234,
num
在循环之前为1234,
rev
为0

第一行得到1234中的4(模,除法的余数)

您将num除以10,通常是123.4,但它是一个
int
,所以只有123。这两行基本上删除了num的最后一个数字(并将其存储在digit中)

最后一行只是将数字“连接”到rev.
如果
rev
为123,而
digital
为4,则将得到
123*10+4=1234


因此,记住循环:数字取自
num
的末尾,放在
rev
的末尾。直到不再有
num

谢谢,帮了我很多忙,现在我可以理解它是如何工作的了!谢谢,帮了我很大的忙,现在我明白这是怎么回事了!谢谢,帮了我很大的忙,现在我明白这是怎么回事了!谢谢,帮了我很大的忙,现在我明白这是怎么回事了!