数位DP模板
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int a[50]; int dp[50][50]; int dfs(int num, ,bool limit) //位数,传递条件 ,上界判断 { if(num==-1)return 0; //最后一位时,根据情况返回1或0 if(!limit && dp[num][ ]!=-1) //已经走过此种状态 return dp[num][ ]; int ans=0; //计数 int up=limit?a[num]:9; //上界 for(int i=0;i<=up;i++){ ans+=dfs(num-1, ,limit && i== up);//传递 } if(!limit) //判断是否可以储存 dp[num][ ]=ans; return ans; } int solve(int x) //将x拆开存入a数组 { int num=0; while(x){ a[num]=x%b; //b表示进制!!! num++; x/=b; } return dfs(num-1, ,true);//传递 } int main() { int l,r; while(scanf("%d%d",&l,&r)!=EOF) { memset(dp,-1,sizeof(dp)); printf("%d\n",solve(r)-solve(l-1)); } return 0; }