首页 > 其他 > 详细

洛谷P1179 【数字统计】

时间:2019-12-07 17:16:41      阅读:117      评论:0      收藏:0      [点我收藏+]

题目传送门

此题题意十分明确:就是让我们统计在[L , R]区间内的数字2出现的次数。

然后我们再看一看此题的数据范围:1≤L≤R≤100000,所以用n log n的复杂度是可以过的。


1.解题思路

我们只需枚举[L,R]区间内每个数字里共出现了多少个2.

2.解题步骤

first,枚举每个数字就不必多说了:

for(int i = l ; i <= r ; i++)//i即为我们枚举的数字
{
                     
}

second,对于每个数字i,统计2出现的次数时,我们需要一位一位去判断,具体方法见例子:

如数字123456,我们想一位一位取出来,不难想到,我们将123456%10后的结果就是数的最后一位->6.

那么,我们又该如何判断下一位呢?只需将数字÷10就可以将最后一位->6给舍去了,按这样重复计算,知道数字为0为止,代码如下:

while(num != 0)
{
    printf("%d\n" , num % 10);
    num /= 10;
}

运行结果如下图:

技术分享图片

显而易见,这样就实现了数位拆分。


完整代码如下:

#include<stdio.h>
using namespace std;
int l , r , ans;
int main()
{
    scanf("%d%d" , &l , &r);//读入两个整数l,r 
    for(int i = l ; i <= r ; i++)//枚举区间内每个数 
    {
        int sum = i;//注意此处的用法,一定要另外用一个变量存这个数,否则会超时 
        while(sum != 0)//数位拆分 
        {
            if(sum % 10 == 2)//判断这位数是否为2 
            {
                ans++;
            }
            sum /= 10;//将最后一位舍去 
        }
    }
    printf("%d" , ans);
    return 0;
}

洛谷P1179 【数字统计】

原文:https://www.cnblogs.com/zzx-0826/p/12002141.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!