有人可以向我解释这段代码是如何工作的吗? (回文 C++)
Can someone explain me how this code works? (Palindrome 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);
这通过迭代 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 的最后一位(并将其存储在数字中) .
最后一行只是"concatenates"要转的数字
如果 rev
是 123 而 digit
是 4,你会得到 123*10+4=1234
所以,记住循环:数字从 num
的末尾取出并放在 rev
的末尾。直到没有num
为止。
我有一个工作代码,但我不太明白它是如何工作的,我知道它的含义和用途,但我不明白它是如何工作的。
#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(模数,一个除法的余数)。
你将 num 除以 10,通常是 123.4,但它是一个 int
,所以只有 123。这两行基本上删除了 num 的最后一位(并将其存储在数字中) .
最后一行只是"concatenates"要转的数字
如果 rev
是 123 而 digit
是 4,你会得到 123*10+4=1234
所以,记住循环:数字从 num
的末尾取出并放在 rev
的末尾。直到没有num
为止。