2282:The Counting Problem

keyword

整数 10進数 C++

概要

mからn(0

vector<int> solve(int n){
    vector<int> ret(10,0);
    if(!n) return ret;

    int d = 1;
    int accum = 1;

    while(n){
        ret[n%10] += accum;
        int st = n%10;
        if(!st) st = 10;
        for(int i=1; i<st; i++){
            ret[i] += d;
        }
        accum += d*(n%10);
        int l = n%10;
        n /= 10;
        for(int i=0; i<10; i++){
            ret[i] += (l?n:(n-1))*d;
        }
        d *= 10;
    }

    return ret;
}

int main(){
    int x, y;
    while(x = readint(), y = readint(), y){
        if(x>y) swap(x,y);
        vector<int> a = solve(x-1), b = solve(y);
        for(int i=0; i<10; i++){
            printf("%d%c",b[i]-a[i], i==9?'\n':' ');
        }
    }
    return 0;
}