码迷,mamicode.com
首页 > 其他好文 > 详细

【递归与递推】计数器

时间:2016-07-04 23:32:50      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:

问题 F: 【递归与递推】计数器

题目描述

一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9。其中—个页码不含多余的0,如N=1234时第5页不是0005,只是5。

输入

一个正整数N(N≤109),表示总的页码。

输出

共十行:第k行为数字k-1的个数。

样例输入

11

样例输出

1
4
1
1
1
1
1
1
1
1
技术分享
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int b[10], c[10], f[10], m;
void slove() {
 
    int M = m, n = 0;
    while(M > 0){
        n++;
        M /= 10;
    }
    b[0] = 1;
    for(int i = 1; i <= 9; i++) {
        b[i] = 10 * b[i - 1];
    }
    M = m;
    for(int i = 0; i < n; i++){
        c[i] = M % 10;
        M = M / 10;
    }
    for(int i = 0; i <= 9 ; i++){
        f[i] = 0;
    }
 
    for(int i = n-1; i >= 1; i--) {
            for(int k = 0; k <= 9; k++){
                f[k] += b[i-1]*i*c[i];
                if (k < c[i]) f[k] += b[i];
               if(c[i] == k) f[k] += m % b[i] + 1;
            }
    }
    for(int k = 0; k <= 9; k++) {
        if (k <= c[0]) f[k] += 1;
    }
    for(int i = 0; i < n; i++){
        f[0] -= b[i];
    }
//    for(int i = n-1; i >= 1; i--){
//        for(int k = 0; k <= 9; k++)
//        f[k] += n % b[i];
//    }
    for(int i = 0; i <= 9; i++){
        printf("%d\n", f[i]);
    }
 
}
int main() {
    cin >> m;
    slove();
    return 0;
}
View Code

 

【递归与递推】计数器

标签:

原文地址:http://www.cnblogs.com/cshg/p/5641830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!