1、思考
答案我们一思考就能得出,9出现的次数是20,即9、19、29、39、49、59、69、79、89、90、91、92、93、94、95、96、97、98、99。但是现在我们要用程序让计算机去干计数9出现次数这件事,我们该怎样设计这样一个程序呢?
2、解决思路
- 对笔者而言,既然只看9,首先想到的是看位来计数,现在我们要考虑一下按这种思路如何设计,笔者认为首先得要定义一个结构体,让我们可以按位来访问1到100之间每一个数字,然后以此结构体定义一个容纳100个这样的结构体以表示1到100之间的数字,然后设计循环遍历计数9出现的次数,这种思路虽然不可以解决问题,但是太复杂了,代码量太大了。
- 现在我们从换一种思路,100以内含有9的数要么高位为9,要么低位为9。高位为9,在程序里按照整型数运算,除以10得到的结果必定为9;现在再看低位为9,首先想到19-10=9,很容易想到取模为10结果为9。其中,9在数字99中出现两次,这是一种特殊情况,这里我们写程序时就要分别两个if语句,一个if取模运算时计数一次,此时计数的是个位上的9,另外一个if整除运算计数一次,计数十位上的9,这样到了99,就会计数两次了。
3、结论
我们选择代码复杂度比较小的第二种方案来解决这个问题。
具体实现如下:
int countNUm_9()//between 1 and 100,record the times of munber "9"
{
int count = 0;
for(int i = 1; i < 100; i++)
{
if( (i % 10 == 9))
count += 1;
if(i / 10 == 9)
count += 1;
}
return count;
}
4、测试
#include <stdio.h>
int countNUm_9()//between 1 and 100,record the times of munber "9"
{
int count = 0;
for(int i = 1; i < 100; i++)
{
if( (i % 10 == 9))
count += 1;
if(i / 10 == 9)
count += 1;
}
return count;
}
int main()
{
printf("'9' occurs %d times\n", countNUm_9());
return 0;
}
运行结果: