1、题目:
9.给一个不多于5位的正整数,要求:
① 求出它是几位数;
②分别输出每一位数字;
③按逆序输出各位数字,例如原数为321,应输出123。
2、程序分析:
- 利用函数strlen(); 可直接得到长度,所以我们定义一个char s 来完成后续操作(因为strlen(); 是对面字符串进行操作)
- 利用函数atoi();将字符串转为整型,通过运算符运算得到每一位,并输出
- 由于在第二问就将char s 转为int类型,所以可以直接用:( d = num % 10; x = x * 10 + d; num = num / 10; )。如果直接延用第二问得到的输出,printf("aa该数逆序后为:%d,%d,%d,%d,%d\n", a1, a2, a3, a4, a5); 效果图如下:
3、知识点:
- C语言中的重要函数极其库函数)的熟练使用( strlen(); )
- 如何依次输出字符串的每一位的数字( atoi(); )
- 逆序( d = num % 10; x = x * 10 + d; num = num / 10; ),这个可以看我的另一篇文章(一维数组逆序(数据结构,C语言版)),从算法的角度看了两种逆序的方法。
4、代码展示:
#include<stdio.h>
#include<string.h> // strlen():字符串长度,不包括'\0'
#include<stdlib.h> // atoi():字符串转为整型
int main() {
char s[10];
printf("请输入一个不多于五位数的正整数:");
scanf("%s", &s);
//第一问:位数
printf("该数长度为:%d\n", strlen(s));
//第二问:逐位输出
int num = atoi(s);
char a5, a4, a3, a2, a1;
a5 = (num / 10000) % 10; //万位数字
a4 = (num / 1000) % 10; //千位数字
a3 = (num / 100) % 10; //百位数字
a2 = (num / 10) % 10; //十位数字
a1 = (num / 1) % 10; //个位数字
printf("该数每一位分别为:%d,%d,%d,%d,%d\n", a5, a4, a3, a2, a1);
//第三问:逆序输出
int d=0 , x=0;
while (num != 0){ //例如:123 第一轮 第二轮 第三轮
d = num % 10; //取num的最后一位 3 2 1(1%10=1)
x = x * 10 + d; //(上轮d*10)+本轮num 的最后一位 3 32 321
num = num / 10; //去掉num的最后一位 12 1 0(1/10=0)
}
printf("该数逆序后为:%d\n", x);
return 0;
}
5、总结:
- 重要函数的熟练掌握。在做题的时候,更快速的想到解决方案,更快的解决问题,直接调用重要函数,会比我们通过各种运算来的要快。
- 基本算法的练习(数字的某一位如何求,逆序)。在考试中出现的频率很高,也是一些很基础的东西,掌握的越牢固,越全面,后面做题就能更加得心应手。
- 找规律:很多的问题,它的底层逻辑是相同相通的,例如,水仙花数,回文数,对称数,其实都是考察的逆序,不过,逆序的时候也要考虑是用字符串还是数组或者是其他的类型,这取决于我们现阶段的知识储备,也就是在能够解决问题的前提下,用我们最熟练,最简便的方法(应付考试)。
- 多看,多写,多思考(举一反三)
6、链接跳转:
知识点:
C语言:Strlen()函数你了解多少? - 知乎 (zhihu.com)
类似的题:
求不超过1993的所有对称数(C语言) 【逆序】