分析:
我们知道 1-100的整数 i 中,9会出现在十位和个位上,数9出现的次数可以通过以下来实现:
- 个位是9 // i % 10得到整数 i 个位上的数
- 十位是9 // i / 10得到整数 i 除了个位数的数字
这也是做这道题之后,我们需要掌握的。思考, 1234想到得到4、12和123如何实现?(先自行思考一下)
1234 % 10 //得到4
1234 / 100 //得到12
1234 / 10 //得到123
代码实现:
#include<stdio.h> int main() int count = 0; int i = 0; for (i = 1; i <= 100; i++) { if (i % 10 == 9)//个位数是9 { count++; printf("%d ", i); } if (i / 10 == 9)//十位数是9 { count++; printf("%d ", i); } } printf("\n"); printf("%d\n", count); return 0; }
从这里可以看出,99是算了两次的,所以数字9的出现次数是20 。那下例打印出19,是怎么回事呢?
易错点
#include<stdio.h> int main() int count = 0; int i = 0; for (i = 1; i <= 100; i++) { if (i % 10 == 9)//个位数是9 { count++; printf("%d ", i); } else if (i / 10 == 9)//十位数是9 { count++; printf("%d ", i); } } printf("\n"); printf("%d\n", count); return 0; }
从运行结果看出,99少算了一次。对比前一个代码,发现差别仅有分支结构(if-if、if-else if)。
- if-if条件只要满足就会都会执行if语句;
- if-else只会执行一个语句,要么是if语句,要么是else语句 。
而这里99首先满足 i % 10 == 9 的判断条件,所以执行完相应语句后,就到for循环的调整语句(i++),没有进入else语句。
期待