编写程序数一下 1到 100 的所有整数中出现多少次数字9。

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;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值