写下区间[a,b]的所有数 ,问一共有多少个 0
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
#define int long long
int n,f[40][40][2][2] ;
vector<int> a;
int dfs(int x,int cnt0,int flg,int lead){
if(x<0){
if(lead) return 1;
return cnt0;
}
if(~f[x][cnt0][flg][lead] && lead==0 &&flg==0)
return f[x][cnt0][flg][lead];
int end=flg?a[x]:9, t=0;
for(int i=0;i<=end;i++){
t+=dfs(x-1,cnt0+(i==0&&lead==0),flg&&i==end,lead&&i==0);
}
if(flg==0||lead==0) f[x][cnt0][flg][lead]=t;
return t;
}
int sov(int x){
memset(f,-1,sizeof f);
a.clear();
while(x){
a.push_back(x%10);
x/=10;
}
return dfs(a.size()-1,0,1,1);
}
signed main(){
int a,b;
while(cin>>a>>b){
if(a==-1&&b==-1) break;
cout<<sov(b)-sov(a-1)<<endl;
}
}
浙公网安备 33010602011771号