1225

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <sstream>
#include <string>
#include <cstring>
#include <cmath>

#define ll long long

using namespace std;

ll digitCount[10];
ll pwr;
ll numberOfDigit[15];//total count of i digit numbers

int getLength(int a)
{
	if(a<10)
	{
		pwr=1;
		return 1;
	}
	int len=0;
	pwr=1;
	while(a)
	{
		len+=1;
		a/=10;
		pwr*=10;
	}
	pwr/=10;//10 to the powr length-1; i.e for 3 digit number 10^2=100
	return len;
}
int main()
{
	int t,n,msd,length;
	ll totaldigit,leadingZeros,nonzeros;
	numberOfDigit[0]=0;
	numberOfDigit[1]=9;//there are 9 1'digit numbers, 90 2'digit numbers
	for(int i=2;i<15;i++)
		numberOfDigit[i]=numberOfDigit[i-1]*10;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		leadingZeros=0;
		nonzeros=0;
		for(int i=0;i<10;i++)
			digitCount[i]=0;
		length = getLength(n);
		for(int i=1;i<length;i++)
		{
			leadingZeros+= numberOfDigit[i]*(length-i);
		}
		totaldigit = length*n;//including leading and trailing zeros
		while(n)
		{
			msd = n/pwr;
			for(int i=1;i<10;i++)
			{
				digitCount[i]+= msd*(length-1)*(pwr/10);//N*10^(N-1) each digit, here N = length-1 and pwr/10 = 10^(N-1)
			}
			for(int i=1;i<msd;i++)
				digitCount[i]+=pwr;
			digitCount[msd]+=(n%pwr+1);
			n=n%pwr;
			pwr/=10;
			length-=1;
		}
		for(int i=1;i<10;i++)
			nonzeros+=digitCount[i];
		digitCount[0] = totaldigit-leadingZeros-nonzeros;
		for(int i=0;i<10;i++)
			cout<<digitCount[i]<<(i!=9?" ":"\n");
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *