按位统计,从后向前分别递归处理每一位。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
long long a,b,cnt;
void slove(long long a,long long d,long long d1,long long k)
{
if(a<0) return;
long long t;
for(t=a;;t--)
{
long long p=t;
while(p)
{
if(p%10==0) cnt+=k;
p/=10;
}
if(t>0)cnt+=d;
else cnt+=d1;
if(t%10==0)
{
t=t/10-1; break;
}
}
slove(t,d*10+k,d*9+d1,k*10);
}
int main()
{
// freopen("test.txt","r",stdin);
while(scanf("%lld%lld",&a,&b)&&a!=-1)
{
long long A,B;
cnt=0;slove(a-1,0,1,1);A=cnt;
cnt=0;slove(b,0,1,1);B=cnt;
printf("%lld\n",B-A);
}
return 0;
}
本文介绍了一种按位统计的算法实现,通过递归处理每一位数,并使用C++语言进行编码。该算法从后向前遍历每一位,针对特定条件进行计数并递归调用自身以处理更高位。
2342

被折叠的 条评论
为什么被折叠?



