How Many O's? UVA - 11038

Posted 中单支援路死河道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了How Many O's? UVA - 11038相关的知识,希望对你有一定的参考价值。

这个题个人感觉有点难,不容易理解。

题意 给你两个数,n,m,找出从n到m所有的数一共包含几个0,看似简单,包含0的不就都是整数么,然后就用暴力循环来找,绝对TL。我自己写这题也没有什么好的办法,没有头绪,也是听别人讲的才明白这个方法,确实厉害。

剥离锁位(名字什么随便起的,下面代码思路及注释)

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long LL;
LL OO(LL left)//此外函数即为本题核心代码及思想。只看代码的话不容易理解,自己找点小的数代入用这个方法解解看,就会明白了。以后类似的找包含别的数字的个数题就可以用这种方法。
{
    LL n=1,mid,right=0,s=0;//从个位开始剥离,依次锁位,就是先定个位为0算有多少个,再定十位为0,算有多少个,以此类推往后算,需要注意每次都不要忘记右侧的数的界限,还有右侧的个数不要忘记加上就可以了
    while(left>9)
    {
        mid=left%10;
        left/=10;
        if(mid==0)
            s+=(left-1)*n+right+1;
        else
            s+=left*n;
        right=right+mid*n;
        n*=10;
    }
    return s;
}
int main()
{
    LL i,n,m,a,b,s;
    while(scanf("%lld%lld",&m,&n),m!=-1&&n!=-1)
    {
        a=OO(m-1);
        b=OO(n);
        s=b-a;
        if(m==0)
            s++;
        printf("%lld\n",s);
    }
    return 0;
}

 

以上是关于How Many O's? UVA - 11038的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3286 How many 0's?(多少0?)

UVA10213 How Many Pieces of Land数学+大数

Poj-3286- How many 0's? - 基础数位DP

UVa 10213 - How Many Pieces of Land ?(欧拉公式)

POJ 3286 How many 0's(数位DP模板)

UVA - 10213 How Many Pieces of Land?(欧拉公式 + 高精度)