Problem:
Problem C:Champernowne Constant

Champernown constant is an irrational number represented in decimal by "0." followed by
concatenation of all positive integers in the increasing order. The first few digits of this constant
are: 0.123456789101112...

Your task is to write a program that outputs the K digits of Chapnernown constant starting at
the N-th place for given two natural numbers K and N.

Input

The input has multiple lines. Each line has two positive integers N and K (N ≤ 109, K ≤ 100)
separated by a space.

The end of input is indicated by a line with two zeros. This line should not be processed.

Output

For each line, output a line that contains the K digits.

Sample Input

4 5
6 7
0 0

Output for the Sample Input

45678
6789101

Solution in JAVA (judge verdict: Time Limit Exceeded)

import java.util.Scanner;

class Main{

    public static void main(String[] args){

	Scanner scan = new Scanner(System.in);

	while(true){

	    int n = scan.nextInt();
	    int k = scan.nextInt();

	    if(n == 0 || k == 0){
		break;
	    }

	    int datal = 0;
	    int them;

	    String s1;
	    //ツつアツつアツつゥツづァ

	    	    
	    int start = 1;
	    if(n > 68888889){
		datal = 68888889;
		start = 10000000;
	    }else if(n > 5888889){
		datal = 5888889;
		start = 100000;
	    }else if(n > 488889){
		datal = 488889;
		start = 100000;
	    }else if(n > 38889){
		datal = 38889;
		start = 10000;
	    }else if(n > 2889){
		datal = 2889;
		start = 1000;
	    }else if(n > 189){
		datal = 189;
		start = 100;
	    }else if(n > 9){
		datal += 9;
		start = 10;
	    }	   
	    //System.out.println("datal = "+ datal);
	    
	    for(int i = start;; i++){
		s1 = String.valueOf(i);
		datal += s1.length();

		if(n <= datal){
		    them = i;
		    s1 = String.valueOf(i);


		    //System.out.println("n = " + n);
		    //System.out.println("them = " + them);
		    //System.out.println("datal = " + datal);

		    break;
		}
	    }

	    //ツつアツつアツづ慊づづーツ陛渉更

	    int disp = 0;

	    for(int i = s1.length()-(datal - n)-1; i < s1.length(); i++){
		System.out.print(s1.charAt(i));
		disp++;
		if(disp == k){
		    break;
		}
	    }

	    if(disp == k){
		System.out.println();
		continue;
	    }


	    int check = 0;

	    for(int i = them+1;;i++){
		s1 = String.valueOf(i);
		for(int j = 0; j < s1.length();j++){
		    System.out.print(s1.charAt(j));
		    disp++;
		    if(disp == k){
			check = -1;
			break;
		    }

		}

		if(check == -1) break;
	    }

	    System.out.println();
	    

	}
    }
}