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

时间:2018-01-14 11:29:36

标签: c++ int

#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 digit“,为什么最后会添加”3“。我得到“3”来自“nr / = 10”,但是为什么它会在“2”附近输出以回答“23”的答案?

4 个答案:

答案 0 :(得分:1)

  

我得到了&#34; 3&#34;来自nr /= 10

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

这种划分的结果确实是3.接下来的循环迭代将其拾取并打印出来,因为3 % 10是3。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您的代码流程

您的代码如下工作(假设您已输入数字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循环将终止之外,对流程的任何更改都不再相关。

第4步

std::cout<<digit;
     

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

答案 3 :(得分:0)

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