求助
查看原帖
求助
758211
zhangchenyi0509楼主2024/8/2 14:29
#include <bits/stdc++.h>
using namespace std;
long long ta,tb,cnt1[14],cnt2[14],a[17],b[17],cnta,cntb,k[25]={0,10};
int main()
{
	cin>>ta>>tb;
	ta=ta-1;
	for (long long i=2;i<=20;i++)
	{
		k[i]=k[i-1]*10;
	}
	while (ta)
	{
		a[++cnta]=1ll*(ta%10);
		ta=ta/10;
	}
	while (tb)
	{
		b[++cntb]=1ll*(tb%10);
		tb=tb/10;
	}
	for (long long i=1;i<=cnta/2;i++)
	{
		swap (a[i],a[cnta-i+1]);
	}
	for (long long i=1;i<=cntb/2;i++)
	{
		swap (b[i],b[cntb-i+1]);
	}
	for (long long i=1;i<=cnta;i++)
	{
		for (long long j=1;j<i;j++)
		{
			cnt1[a[j]]=cnt1[a[j]]+a[i]*k[cnta-i];
		}
		for (long long j=1;j<a[i];j++)
		{
			cnt1[j]=cnt1[j]+k[cnta-i];
		}
		if (i!=1&&a[i]>0)
		{
			cnt1[0]=cnt1[0]+k[cnta-i];
		}
		if (i<cnta)
		{
			for (long long j=1;j<=9;j++)
			{
				cnt1[j]=cnt1[j]+k[cnta-i-1]*(cnta-i)*a[i];
			}
			if (i!=1)
			{
				cnt1[0]=cnt1[0]+k[cnta-i-1]*a[i]*(cnta-i);
			}
		}
		if (i==1)
		{
			if (cnta>=2)
			{
				cnt1[0]=cnt1[0]+(a[1]-1)*(cnta-1)*k[cnta-2];
			}
			for (long long j=2;j<=cnta;j++)
			{
				cnt1[0]=cnt1[0]+9*(cnta-j)*k[cnta-j-1];
			}
		}
	}
	for (long long i=1;i<=cntb;i++)
	{
		for (long long j=1;j<i;j++)
		{
			cnt2[b[j]]=cnt2[b[j]]+b[i]*k[cntb-i];
		}
		for (long long j=1;j<b[i];j++)
		{
			cnt2[j]=cnt2[j]+k[cntb-i];
		}
		if (i!=1&&b[i]>0)
		{
			cnt2[0]=cnt2[0]+k[cntb-i];
		}
		if (i<cntb)
		{
			for (long long j=1;j<=9;j++)
			{
				cnt2[j]=cnt2[j]+k[cntb-i-1]*(cntb-i)*b[i];
			}
			if (i!=1)
			{
				cnt2[0]=cnt2[0]+k[cntb-i-1]*b[i]*(cntb-i);
			}
		}
		if (i==1)
		{
			if (cntb>=2)
			{
				cnt2[0]=cnt2[0]+(b[1]-1)*(cntb-1)*k[cntb-2];
			}
			for (long long j=2;j<=cntb;j++)
			{
				cnt2[0]=cnt2[0]+9*(cntb-j)*k[cntb-j-1];
			}
		}
	}
	for (long long i=0;i<=9;i++)
	{
		cout<<cnt2[i]-cnt1[i]<<" ";
	}
	return 0;
}
2024/8/2 14:29
加载中...