该程序如何反向打印数字的数字?
How does this program print number's digits in reverse?
#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 循环中的条件,变量nr为3)。
步骤 2
int digit = nr % 10;
结果:数字现在包含值 3,因为3 % 10 = 3。
步骤 3
nr /= 10;
与流的任何更改不再相关,除了 while-loop 将终止。
步骤 4
std::cout<<digit;
结果:3(因为数字变量现在是3)。 因此,完整的输出将为23。
因为 while 循环意味着其中的代码被重复,直到不再满足条件。对于两位数字,打印语句将因此执行两次。
相关文章:
- 打印数字图案
- 将数字打印成文字
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 必须首先打印向量 v1 中最接近整数 x 的数字<int>
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 我的问题是关于C++中数字和序列的重复以及如何打印它们?
- 编译器始终打印十六进制/八进制数字
- 我想使用哈希图打印非重复的数字;
- 如何在控制台上打印出带有数字 0-99 的简单数组
- 错误含义;以二进制形式打印数字
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 列中打印数字时如何避免打印垃圾?
- 如何编写一个程序来打印特定基数的前N个数字
- C++ 在地板函数之后以十六进制打印数字
- C 不将重复数字打印到输出
- 阿姆斯特朗数字打印错误
- 用数字打印所有可能的组合
- 将数字打印为字符串类型的数字
- 如何以特定格式将数字打印到字符串的中间
- 如何将矢量中的数字打印到文件中