写下区间[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; } }
标签:40,int,long,How,11038,UVA,include From: https://www.cnblogs.com/towboa/p/17334488.html