Guest User

Untitled

a guest
Oct 20th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.StringTokenizer;
  5.  
  6.  
  7. public class digits {
  8.  
  9.     public static void main(String[] args) throws IOException {
  10.        
  11.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  12.         StringTokenizer st; String s;
  13.         int A, B;
  14.         int[] fA, fB;
  15.  
  16.         while(!(s=br.readLine()).equals("0 0")){
  17.  
  18.             st = new StringTokenizer(s);
  19.             A = Integer.parseInt(st.nextToken());
  20.             B = Integer.parseInt(st.nextToken());
  21.  
  22.             fA = new int[10];
  23.             fB = new int[10];
  24.  
  25.             for (int i = 0; i < 10; i++) {
  26.                
  27.                 fA[i] = contar(A-1, i);
  28.                 fB[i] = contar(B, i);
  29.                
  30.                 System.out.print(fB[i] - fA[i]);
  31.                 if(i < 9) System.out.print(" ");
  32.             }
  33.             System.out.println();
  34.            
  35.         }
  36.  
  37.     }
  38.    
  39.    
  40.     static public int contar(int N, int d){
  41.        
  42.         if(N < 0) return 0;
  43.         if(N < 10) return d <= N ? 1 : 0;
  44.        
  45.         int L = (N+"").length();
  46.         int aLm1 = Integer.parseInt((N+"").substring(0,1));
  47.        
  48.         int diezLm1 = 1;
  49.         int diezLm2 = 1;
  50.        
  51.         for (int i = 0; i < L-2; i++) {
  52.             diezLm2 = diezLm2*10;
  53.         }
  54.        
  55.         for (int i = 0; i < L-1; i++) {
  56.             diezLm1 = diezLm1*10;
  57.         }
  58.        
  59.         if(d != 0){
  60.             return contar(N%diezLm1, d) + aLm1*diezLm2*(L-1) + (d<aLm1 ? diezLm1 : 0) + (d==aLm1 ? N%diezLm1 + 1 : 0);
  61.         }
  62.         else{
  63.            
  64.             System.out.println(N+":");
  65.             System.out.println(contar(N%diezLm1, d));
  66.             System.out.println((L-1-largo(N%diezLm1))*(N%diezLm1));
  67.             System.out.println((aLm1-1)*diezLm2*(L-1));
  68.             System.out.println(b(L-1));
  69.             System.out.println();
  70.            
  71.             return contar(N%diezLm1, d) +fix(L-1) +(L-1-largo(N%diezLm1))*(N%diezLm1) + (aLm1-1)*diezLm2*(L-1) + b(L-1);
  72.         }
  73.        
  74.     }
  75.    
  76.     static public int largo(int n){
  77.         if(n == 0) return 0;
  78.         return (n+"").length();
  79.     }
  80.    
  81.     static public int b(int n){
  82.         if(n == 1) return 1;
  83.        
  84.         int diezNm2 = 1;
  85.        
  86.         for (int i = 0; i < n-2; i++) {
  87.             diezNm2 = 10*diezNm2;
  88.         }
  89.        
  90.         return 9*(n-1)*diezNm2 + b(n-1);
  91.     }
  92.    
  93.     static public int fix(int L){
  94.         if(L == 0) return 1;
  95.        
  96.         String chant = "";
  97.         for (int i = 0; i < L; i++) {
  98.             chant = chant+"1";
  99.         }
  100.        
  101.         return 9*Integer.parseInt(chant);
  102.     }
  103.    
  104. }
Add Comment
Please, Sign In to add comment