MDIGITS - Counting Digits

Tác giả: hieult

Ngôn ngữ: C++

#include <stdio.h>
//#include <conio.h>

int xuly(int x,int A)
{
    if(A == 0)
        return 0;
    int B = A, t = 0,mu10 = 1;
    while(B>=10)
    {
        B = B/10;
        t++;
        mu10 = mu10*10;
    }
    int y = A/mu10, a = (A - y*mu10);
    if(y<x)
         return y*t*(mu10/10) + xuly(x,a);
    else if(y>x)
         return mu10 + y*t*(mu10/10) + xuly(x,a);
    else if(y == x)
         return a+1+y*t*(mu10/10) + xuly(x,a);
}

int sochuso(int A)
{
    int KQ = 0;
    int B = A, t = 0,mu10 = 1;
    while(B>=10)
    {
        B = B/10;
        t++;
        mu10 = mu10*10;
    }
    for(int i = 1;i<=t;i++)
    {
        int nhan10 = 9*i;
        for(int j = 2;j<=i;j++)
            nhan10 = nhan10*10;
        KQ = KQ + nhan10;
    }
    KQ = KQ + (A-mu10+1)*(t+1);
    return KQ;
}

int main()
{
    int u[10],a,b;
    while(scanf("%d %d",&a,&b)>0 && a>0)
    {
        if(a>b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
        int hieu = 0;
        for(int i = 1;i<=9;i++)
        {
            u[i] = xuly(i,b)- xuly(i,a-1);
            hieu = hieu + u[i];
        }
        u[0] = sochuso(b) - sochuso(a-1) - hieu;
        for(int i = 0;i<=9;i++)
            printf("%d ",u[i]);
        printf("\n");
    }
   // getch();
}

Download