偷来的代码。。记板子记板子……感觉大佬的代码一直都好清晰简洁,学习学习 http://blog.csdn.net/f_zyj/article/details/52082449
#include<iostream> #include<string.h> using namespace std; typedef long long ll; ll l,r,dp[20]; ll qpow(ll x,ll n) //emmmm快速幂 { ll res=1; while(n) { if(n&1) res*=x; x*=x; n>>=1; } return res; } void init() //初始化 { memset(dp,0,sizeof(dp)); for(int i=1;i<20;i++) dp[i]=dp[i-1]*10+qpow(10,i-1); } ll DP(ll x,ll i) { ll res=0,len=0,digit=0,radix=1,tail=0,nx=x; while(x) { digit=x%10; x/=10; ++len; if(digit>i) res+=radix+digit*dp[len-1]; else if(digit==i) res+=tail+1+digit*dp[len-1]; else if(digit<i) res+=digit*dp[len-1]; tail+=digit*radix; radix*=10; } if(i==0) //处理前缀为0的情况 { ll m=1; while(nx) { nx/=10; res-=m; m*=10; } } return res; } int main() { ios::sync_with_stdio(false); init(); cin>>l>>r; for(int i=0;i<10;i++) cout<<DP(r,i)-DP(l-1,i)<<endl; return 0; }