LightOJ-1140-How Many Zeroes?

2014-11-24 13:13:27 · 作者: · 浏览: 5

Jimmy writes down the decimal representations of all natural numbers between and including m and n, (m ≤ n). How many zeroes will he write down

Input

Input starts with an integer T (≤ 11000), denoting the number of test cases.

Each case contains two unsigned 32-bit integers m and n, (m ≤ n).

Output

For each case, print the case number and the number of zeroes written down by Jimmy.

Sample Input

Output for Sample Input

5

10 11

100 200

0 500

1234567890 2345678901

0 4294967295

Case 1: 1

Case 2: 22

Case 3: 92

Case 4: 987654304

Case 5: 3825876150


写错一个小地方。。。。然后调了很久。。。。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          using namespace std; typedef long long ll; ll n,m; vector
         
           digit; ll pow10[25]; ll dp[25]; ll getSum(int pos){ ll sum = 0; for(int i = pos; i >= 0; i--){ sum *= 10; sum += digit[i]; } return sum+1; } ll dfs(int pos,int zero,int done){ if(pos==-1) return 0; if(!done &&!zero && ~dp[pos]) return dp[pos]; ll res = 0; int end = done digit[pos]:9; for(int i = 0; i <= end; i++){ if(i==0){ if(done&&i==end){ if(pos==0) res++; else if(!zero)res += getSum(pos); }else{ if(pos==0) res++; else if(!zero) res += pow10[pos]; } } res += dfs(pos-1,zero&&i==0,done&&i==end); } if(!done && !zero) dp[pos] = res; return res; } ll solve(ll x){ digit.clear(); if(x==0) digit.push_back(0); while(x){ digit.push_back(x%10); x /= 10; } return dfs(digit.size()-1,1,1); } void init(){ memset(dp,-1,sizeof dp); pow10[0] = 1; for(int i = 1; i <= 24; i++){ pow10[i] = pow10[i-1]*10; } } int main(){ int ncase,T=1; cin >> ncase; init(); // cout<
          
           > n >> m; printf("Case %d: ",T++); if(n==0){ cout<