该程序如何反向打印数字的数字?

How does this program print number's digits in reverse?

本文关键字:数字 打印 程序 何反      更新时间:2023-10-16
#include <iostream>
int main() {
int nr;
std::cin>>nr;
while (nr > 0) {
int digit = nr % 10;
nr /= 10;
std::cout<<digit;
}
return 0;
}

有人可以解释一下这个程序的工作流程,基本上输入"32"它输出"23",这很好,这是我的目标,我的问题是,为什么它说"23"而不仅仅是"2",如果我只说"cout 数字",为什么最后添加"3"。我知道"3"来自" nr/= 10",但是为什么它在" 2"附近输出以产生答案" 23"?

我知道"3"来自nr /= 10

在程序开始打印 3 之前,它会打印 2,这是您将 32 除以 10 后得到的余数

这种划分的结果确实是3。下一个循环迭代会拾取它并打印它,因为3 % 10是 3。

while 进行两次迭代。它测试条件是否为真,执行内部内容。数字取值 2,nr 变为 3,输出 2。然后对于第二次迭代,nr 仍然大于 0,所以数字变成 3,nr 变成 0,它输出 3。不再满足条件,因此退出循环。(使用 23 作为输入,即)

代码流程

您的代码如下工作(假设您输入了数字 32,因此变量nr为 32)。

第一次迭代

步骤 1

while(32 > 0)

结果:真。

步骤 2

int digit = nr % 10;

结果:由于余数 (%)操作,数字现在包含值2

步骤 3

nr /= 10;

结果:NR现在包含值3,因为32/10的结果是3.2,这是一个浮点数,但由于您正在分配此值 数字到一个整数,它隐式转换为数字3

步骤 4

std::cout<<digit;

结果:2(可变数字仍然不受影响,因为余数运算2)。

第二次迭代

步骤 1

while(3 > 0) 

结果:true(再次调用 while 循环中的条件,变量nr3)。

步骤 2

int digit = nr % 10;

结果:数字现在包含值 3,因为3 % 10 = 3

步骤 3

nr /= 10;

与流的任何更改不再相关,除了 while-loop 将终止。

步骤 4

std::cout<<digit;

结果:3(因为数字变量现在是3)。 因此,完整的输出将为23

因为 while 循环意味着其中的代码被重复,直到不再满足条件。对于两位数字,打印语句将因此执行两次。