这个问题是我在做学校的作业时候看到的。只隐约有印象讲过,但是忘记了怎么操作。听同学的点通才回想起来,特此写个博客留记
[toc]
逆序打印
目的:输入“789”,打印“987”
注:本博客的数字逆序只涉及 十进制
代码实现有两种方式:
1.利用if语句进行大小判断,直到选出从大到小的数字排序
这个方法十分复杂,稍不留意就会弄错,所以在实际应用中不推荐这样操作
这里就不赘述具体代码了。(才不是懒,压根没试过)
2.使用%10的方法直接打印
代码如下:
1 |
|
代码结果如下
这个代码成功达到了我们的目的,但是有一个比较明显的弊端
如果我们需要更多位的数字的逆序数时,这个代码就会变得很长,而且每次都需要我们手动添加一个新的printf
代码优化1
想要逆序比较长的数字,就需要用到循环语句,我使用的是for循环
主要需要解决的问题是,a每%10一次后就需要除以10再%10一次
1 |
|
代码运行结果如下
我们的目的成功达成!
代码优化2
上面的代码虽然完成了我们设想的目的,但它还是有一个缺点
需要用户手动输入数字的位数
设想一下,系统需要你填写你的手机号,你输入自己的手机号后,系统还要再问问你“你的手机号有几位数”
这换谁都血压飙升,怒m代码猿了吧!
那怎样让代码自动逆转我们需要的数字呢?
注:这串代码是我在b站看到的,顿时联想到了自己的博客,于是又跑过来更新了! 原视频链接
图里while后面的不等于符号应该是一个vscode的插件,我们需要将它改成!=
1 |
|
这串代码就是完美的了吗?
并不是,如果我们键入1000,结果就会发生一些细微的变化
输出的结果竟然是1,但我们需要的应该是0001
代码优化3
这里涉及到了%d时左补0的问题
printf打印时%d左补0
假设下面这串代码是需要输出1000逆序后数字0001的printf语句
因为1000只有4位,所以我们可以在%和d之间加上04
即满4位不补,不满4位左补0
1 | int n =1; |
但在逆序数字里面,我们需要打印的数字长度是不可控的
这里需要用到左补0的另外一种代码
- 用另外一个变量来表示数的位数
1 | int n=1; |
这样下来就简单了,我们只需要在原有的while循环里面加上另外一个变量
每次逆序循环完成后,这个变量都++一次,就能达到我们的目的
1 |
|
运行结果如下:
这下我们的目的才真正完成了,既可以不用自己多输入一遍数字的个数
又能在输入10000这类数字的时候,逆序后自动左补0
希望这对你有帮助!
- 本文标题:【C语言】如何将输入的数字逆序打印
- 创建时间:2021-11-11 20:19:28
- 本文链接:posts/2746269565/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!