• 洛谷P1179 【数字统计】


    题目传送门

    此题题意十分明确:就是让我们统计在[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
    " , 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;
    }
    
  • 相关阅读:
    ch5 对链接应用样式
    ch4 圆角框
    ch4 背景图像基础
    ch8 CSS 3列(等高文本列)
    ch8 高度相等的列--CSS方法
    ch8 faux列
    java基础 (四)之集合
    java基础 (二)之HashMap,HashTable,ConcurrentHashMap区别
    java基础 (三)之ConcurrentHashMap(10)未完待续~~~
    java基础 (一)之HashMap(jdk1.7)
  • 原文地址:https://www.cnblogs.com/zzx-0826/p/12002141.html
Copyright © 2020-2023  润新知