C语言 | 给出一个不多于5位的正整数,求它是几位数,分别输出每一位数字,按逆序输出各位数字 作者: Chuwen 时间: 2019-04-12 分类: C/C++ > 第 109 页,第 9 题: >> 9.给出一个不多于5位的正整数: >> ① 求出它是几位数; >> ② 分别输出它是几位数; >> ③ 按逆序输出个位数字,例如原数为 321,应输出 123。 # 大致思路: > 下列所述以:12345 为例;变量 i 的初值为 0 1. 要求判断它是几位数,那么我们可以先求出各个数对应位置的值(个、十、百、千、万),具体取法看下方 `C 语言代码` 2. 开始判断 1. 从一个数(假设是:12345)的 **万位** 开始判断,如果不是 **0**,将**万位**的值赋给 `a 变量`,并 `i=i+1` 2. 然后判断 **千位**,如果不是 **0**,将**千位**的值赋给 `b 变量`,并 `i=i+1` 3. 然后判断 **百位**,如果不是 **0**,将**百位**的值赋给 `c 变量`,并 `i=i+1` 4. 然后判断 **十位**,如果不是 **0**,将**十位**的值赋给 `d 变量`,并 `i=i+1` 5. 然后判断 **个位**,如果不是 **0**,将**个位**的值赋给 `e 变量`,并 `i=i+1` 3. 然后输出变量 `i` 的值,即可得到这个数是几位数 4. 分别输出每一个数字,即先判断它几位数,然后输出 **a、b、c、d、e** 变量的值即可,具体可以看下方代码 5. 逆序输出这个数字,先判断几位数,再输出 **a、b、c、d、e** 变量的值,具体可以看下方代码 # C 语言代码如下: ```c #include int main(){ int num,total=0; int a,b,c,d,e;//万,千,百,十,个 printf("请输入一个不多于5位的正整数:"); scanf("%d", &num); a = num/10000;//取万位数值 b = (num/1000)%10;//取千位数值 c = (num/100)%10;//取百位数值 d = (num/10)%10;//取十位数值 e = num%10;//取个位数值 printf("\n"); if(a != 0) { total++; printf("万位:%d\n", a); } if(b != 0){ total++; printf("千位:%d\n", b); } if(c != 0){ total++; printf("百位:%d\n", c); } if(d != 0){ total++; printf("十位:%d\n", d); } if(e != 0){ total++; printf("个位:%d\n", e); } printf("\n你输入的 %d 是 %d 位数\n", num, total); printf("\n逆序输出:"); switch(total){ case 1: printf("%d", e); break; case 2: printf("%d%d", e, d); break; case 3: printf("%d%d%d", e, d, c); break; case 4: printf("%d%d%d%d", e, d, c, b); break; case 5: printf("%d%d%d%d%d", e, d, c, b, a); break; } return 0; } ``` # 运行结果: ``` 请输入一个不多于5位的正整数:12345 万位:1 千位:2 百位:3 十位:4 个位:5 你输入的 12345 是 5 位数 逆序输出:54321 ``` 标签: C
是否没考虑万位不为零,但是中间位为零的情况
可以考虑10000.1000.100.10这种有0的情况,第三问就是前两问的结合,把第一问与第二问结合到一起,就出来了第三问