• poj 3268


    题目:http://poj.org/problem?id=3286

    假设从 1 到 m的数中 含有 0 的个数为 numm,从 1 到 n 含有 0 的个数为 numn 那么要求 从 n 到 m 的数里含有 0 的个数 ans = numm - numn + sum(n 里面含有 0 的个数)

    对于给的数N,从右到左枚举每一位,当枚举第 i 位时,它左边的数记为 left,从它自身到最后记为 right,

      1 若第 i 位为 0 ,说明 N里面本身有一个0 , 求出比 left 0 right(— 0 —) 小的数+1   加至 sum ;              

      2 若第i 位不为0,则 N 该位没0,那么小于 left 0 right (— 0 —)的数都是小于N的, 算出   加至 sum ;

    重复以上两个过程,直至left < 10 ;

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <math.h>
     7 #include <queue>
     8 #include <set>
     9 #define N 1010
    10 #define inf 100000007
    11 #define _clr(a,val) (memset(a,val,sizeof(a)))
    12 
    13 using namespace std;
    14 
    15 typedef long long ll;
    16 
    17 ll cal(ll m)
    18 {
    19     ll l,r,d;
    20     ll p = 1;
    21     ll sum = 0;
    22     l = m; r = 0;
    23     while(1)
    24     {
    25         if(l < 10) break;
    26         d = l % 10;
    27         l /= 10;
    28         if(d)
    29         {
    30             sum += l * p;
    31         }
    32         else sum += (l - 1) * p + r + 1;
    33         r = d * p + r;
    34         p *= 10;
    35     }
    36     return sum;
    37 }
    38 int main()
    39 {
    40     ll n,m;
    41     ll temp;
    42     //freopen("data.txt","r",stdin);
    43     while(cin>>n>>m)
    44     {
    45         if(n == -1 && m == -1) break;
    46         temp = 0;
    47         ll ans1 = cal(m);
    48         ll ans2 = cal(n);
    49         do
    50         {
    51             int d = n % 10;
    52             n /= 10;
    53             if(!d) temp++;
    54         }while(n);
    55         ll ans = ans1 - ans2 + temp;
    56         cout<<ans<<endl;
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    博客园如何运行代码
    视觉差
    h5 播放器 -3
    播放器 视频 音频 -1
    游戏 保卫萝卜
    跟踪算法
    走口字

    联动日历
    jq 抽奖
  • 原文地址:https://www.cnblogs.com/fxh19911107/p/2645205.html
Copyright © 2020-2023  润新知