• lightoj 1140


    Jimmy writes down the decimal representations of all natural numbers between and including m and n, (m ≤ n). How many zeroes will he write down?

    Input

    Input starts with an integer T (≤ 11000), denoting the number of test cases.

    Each case contains two unsigned 32-bit integers m and n, (m ≤ n).

    Output

    For each case, print the case number and the number of zeroes written down by Jimmy.

    Sample Input

    Output for Sample Input

    5

    10 11

    100 200

    0 500

    1234567890 2345678901

    0 4294967295

    Case 1: 1

    Case 2: 22

    Case 3: 92

    Case 4: 987654304

    Case 5: 3825876150

    题意:给你两个数m,n。问你在m~n之间0的个数。

    这题类似lightoj1032,只不过这题是求0的个数。求0的个数一定要考虑是否是首位,我们知道0不能为第一位,所以这题在搜索上就加一个判断

    条件,看一下搜索到的是否为首位。

    #include <iostream>
    #include <cstring>
    using namespace std;
    typedef long long LL;
    LL dp[33][33];
    LL dig[33];
    LL dfs(LL x , LL cnt , LL flag , LL first)
    {
        if(x == 0)
        {
            if(first)
                return 1;
            else
                return cnt;
        }
        if(dp[x][cnt] != -1 && !flag && !first)
            return dp[x][cnt];
        LL sum = 0;
        LL gg = flag ? dig[x] : 9;
        for(int i = 0 ; i <= gg ; i++)
        {
            if(first)
            {
                sum += dfs(x - 1 , cnt , i == gg && flag , first && i == 0);
            }
            else
            {
                if(i == 0)
                {
                    sum += dfs(x - 1 , cnt + 1 , i == gg && flag , 0);
                }
                else
                {
                    sum += dfs(x - 1 , cnt , i == gg && flag , 0);
                }
            }
        }
        if(!flag && !first)
            dp[x][cnt] = sum;
        return sum;
    }
    LL Gets(LL x)
    {
        memset(dig , 0 , sizeof(dig));
        int temp = 0;
        if(x == 0)
            dig[1] = 0;
        while(x)
        {
            dig[++temp] = x % 10;
            x /= 10;
        }
        return dfs(temp , 0 , 1 , 1);
    }
    int main()
    {
        int t;
        cin >> t;
        int ans = 0;
        while(t--)
        {
            ans++;
            LL n , m;
            memset(dp , -1 , sizeof(dp));
            cin >> n >> m;
            //cout << Gets(m) << ' ' << Gets(n - 1) << endl;
            cout << "Case " << ans << ": " << Gets(m) - Gets(n - 1) << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    【WPF】操作RichTextBox(取值、赋值、清空、滚动条自动滚动实例、文本自动滚动实例)
    系统初始化 服务列表
    多个filter如何决定调用顺序
    IE浏览器 查看Form对象
    java try_catch 分析
    关于ClassLoader 和Class的俩个记录
    lis分析之一一批处理(任务)如何连接数据库的
    document.all("div).style.display = "none"与 等于""的区别
    Mybatis Util包
    Spring创建bean对象的三种方式
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/6008058.html
Copyright © 2020-2023  润新知