计算数字位数 背景 早就想知道怎么实现了,今天恰好碰到了这个题:
判断一个整型数据有几位v2.0 从键盘输入一个整型数据(int型),用switch语句和循环语句编写程序判断该整数共有几位,并输出包含各个数字的个数。例如,从键盘输入整数16644,该整数共有5位,其中有1个1,2个6,2个4。 程序运行结果示例1: Please enter the number: 12226↙ 12226: 5 bits 1: 1 2: 3 6: 1 程序运行结果示例2: Please enter the number: -12243↙ -12243: 5 bits 1: 1 2: 2 3: 1 4: 1 输入格式: “%d” 输出格式: 输入提示信息:”Please enter the number:\n” 判断该整数共有几位:”%d: %d bits\n” 包含数字0的个数:”0: %d\n” 包含数字1的个数:”1: %d\n” 包含数字2的个数:”2: %d\n” 包含数字3的个数:”3: %d\n” 包含数字4的个数:”4: %d\n” 包含数字5的个数:”5: %d\n” 包含数字6的个数:”6: %d\n” 包含数字7的个数:”7: %d\n” 包含数字8的个数:”8: %d\n” 包含数字9的个数:”9: %d\n”
我写的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 #include <stdio.h> #include <math.h> int main () { int num, current; int i; int zero = 0 , one = 0 , two = 0 , three = 0 , four = 0 , five = 0 , six = 0 , seven = 0 , eight = 0 , nine = 0 ; printf ("Please enter the number:\n" ); scanf_s("%d" , &num); current = fabs (num); for (i = 1 ;;i++) { switch (current % 10 ) { case 0 : zero++; break ; case 1 : one++; break ; case 2 : two++; break ; case 3 : three++; break ; case 4 : four++; break ; case 5 : five++; break ; case 6 : six++; break ; case 7 : seven++; break ; case 8 : eight++; break ; case 9 : nine++; break ; } current = current / 10 ; if (current == 0 ) { printf ("%d: %d bits\n" , num, i); break ; } } if (zero != 0 ) { printf ("0: %d\n" , zero); } if (one != 0 ) { printf ("1: %d\n" , one); } if (two != 0 ) { printf ("2: %d\n" , two); } if (three != 0 ) { printf ("3: %d\n" , three); } if (four != 0 ) { printf ("4: %d\n" , four); } if (five != 0 ) { printf ("5: %d\n" , five); } if (six != 0 ) { printf ("6: %d\n" , six); } if (seven != 0 ) { printf ("7: %d\n" , seven); } if (eight != 0 ) { printf ("8: %d\n" , eight); } if (nine != 0 ) { printf ("9: %d\n" , nine); } return 0 ; }
还是屎山代码~~,我怎么只会这么写!
问题解决 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <stdio.h> #include <math.h> int main () { int num, current; int i; int count[10 ] = { 0 }; printf ("Please enter the number:\n" ); scanf_s("%d" , &num); current = fabs (num); for (i = 1 ;; i++) { count[current % 10 ]++; current = current / 10 ; if (current == 0 ) { printf ("%d: %d bits\n" , num, i); break ; } } for (i = 0 ; i < 10 ; i++) { if (count[i] != 0 ) { printf ("%d: %d\n" , i, count[i]); } } return 0 ; }
看看我自己写的80行,AI写的才30行 利用数组 代替10个单独变量,大幅简化代码 我们可以把数组想象成一排 “小盒子”,每个盒子都有一个编号(就是[]里的数字,叫 “下标”),盒子里可以放一个值。 以代码里的count[10]为例:
它有 10 个小盒子,编号是0到9(注意 :数组下标从 0 开始,不是 1)。
每个盒子专门用来记一个数字出现的次数:count[0]记数字 0 出现几次,count[1]记数字 1 出现几次……count[9]记数字 9 出现几次。
举个生活例子:假设你在统计班级同学的生日月份,1 月到 12 月。你可以准备 12 个盒子,编号 1 到 12。
有人说 “我 1 月生日”,就往编号 1 的盒子里放 1 个小球。
又有人说 “我 1 月生日”,再往编号 1 的盒子里放 1 个小球(现在里面有 2 个)。
有人说 “3 月生日”,往编号 3 的盒子里放 1 个小球……
这里的 “盒子编号” 就相当于数组的[]里的下标,“盒子里的小球数量” 就是数组元素的值。
总结
计算输入的数字有几位时写的代码很好
但因为不会数组,导致自己写的计算数字出现的次数的代码的时候极为复杂