(C语言)逆序的三位数

  • Post author:
  • Post category:其他


题目描述:程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7,而不是007。

题目分析:这题是很基础的C语言入门题,也是非常高频的练习题,无论走哪条路学习C语言你都有必要掌握它。思路很直观,取出每一位数,再倒着输出就行。

首先是取出每一位数字(下文提到的模是求余数的意思):

对于个位,我们可以直接模10(%10,也就是除以10的余数),比如123%10=3,我们就得到了个位。

十位稍微复杂一些,我们可以先除以10,再模10(/10%10)。比如123,除以10的结果是12(整除的特性,舍弃了小数部分),12再模10就等于2得到了十位。也可以先模100再除以10,比如123模100等于23,再除以10就等于2。

百位比较简单,直接利用整除特性,123除以100(123/100),直接就得到1,取得百位,也是整除特性,舍弃了小数部分。

(那么如果是更多位数如何去做,也是取余和取模的组合,掌握了原理都是一样的)

但是这里需要注意,要去除前导0。我们用了一种最简单的方法,比如700,结果不是007,我们处理的方式是直接乘:对于700:百位:7, 十位:0,个位:0。反转过后:百位:0,十位:0,个位:7, 我们直接0*100 + 0*10 + 7 = 7,直接得到结果7,前导0直接就被去掉了。

#include<stdio.h>

int main(){
    int n,a,b,c; // a,b,c分别用来存输入数的个位、十位、百位
    scanf("%d",&n);
    a = n/100; //整除得到百位
    b = n/10%10; //先整除10去除个位,再模10就得十位; 也有另一种方式n%100/10,是先去除百位,再整除得到十位
    c = n%10; //直接模10得到个位
    printf("%d",c*100+b*10+a); //直接乘起来,前导0自动就消除了
    return 0;
}

中国大学慕课OJ运行测试:

PTA提交通过:

多个OJ中都有,算是比较经典的C语言基础题目了,学习C语言的这里面涉及的知识点肯定都要掌握。

主要知识点包括:

(1)通过取模和整除灵活得到不同位置上的数字,取模和整除操作也是C语言包括其他语言中最基础和常用的操作。

(2)如何去除前导0,不同的情况需要不同的设计,这里我直接使用了重新组合成数字的方式,有的时候可能需要不同的方式,甚至有的题目还要保留前导0。

如果你不能熟练完成这一题,那还需要更多练习。如果你完成这一题了,但是不够熟练,一定要仔细学习这题涉及的知识点。



版权声明:本文为qq_41448334原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。