zoukankan      html  css  js  c++  java
  • 51nod 1042 数字0-9的数量

    1042 数字0-9的数量 

    给出一段区间a-b,统计这个区间内0-9出现的次数。
     
    比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次。
    Input
    两个数a,b(1 <= a <= b <= 10^18)
    Output
    输出共10行,分别是0-9出现的次数
    Input示例
    10 19
    Output示例
    1
    11
    1
    1
    1
    1
    1
    1
    1
    1

    计算[a,b]中0-9的次数。
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <cstring>
     4 #include <math.h>
     5 #define ll long long
     6 using namespace std;
     7 
     8 ll dp[20];
     9 
    10 void init() {
    11     memset(dp, 0, sizeof(dp));
    12     for(int i = 1; i <= 18; i ++) {
    13         dp[i] = dp[i-1]*10 + pow(10,i-1);
    14     }
    15 }
    16 ll count(ll r, int x) {
    17     ll sum = 0, len = 0, cnt = 1, tail = 0, rr = r;
    18     while(r) {
    19         int tmp = r%10;
    20         r /= 10;
    21         len ++;
    22         if(tmp > x) {
    23             sum += dp[len-1]*tmp + cnt;
    24         } else if(tmp == x) {
    25             sum += dp[len-1]*tmp + tail + 1;
    26         } else {
    27             sum += dp[len-1]*tmp;
    28         }
    29         tail = tail + tmp*cnt;
    30         cnt *= 10;
    31     }
    32     if(!x) { //是0的话就删除前缀为0的
    33         ll ans = 1;
    34         while(rr) {
    35             sum -= ans;
    36             ans *= 10;
    37             rr /= 10;
    38         }
    39     }
    40     return sum;
    41 }
    42 int main() {
    43     init();
    44     ll a, b;
    45     cin >> a >> b;
    46     for(int i = 0; i < 10; i ++) {
    47         cout << count(b,i) - count(a-1,i) << endl;        
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Mathematics:GCD & LCM Inverse(POJ 2429)
    MST:Out of Hay(POJ 2395)
    DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
    《程序员修炼之道——从小工到专家》阅读笔记*part1
    Java课05
    Java课04
    Javaweb课堂测试
    Java课03
    Java课02
    回文判断
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/8893856.html
Copyright © 2011-2022 走看看