Problem:
循環小数

2 つの正の整数 p, q を入力し、 p / q を小数として正確に表現することを考えます。(ただし、0 < p < q < 106とします。)

このとき、結果は

有限の桁で正確に表現できる。

ある桁の範囲を繰り返す循環小数となる。

のいずれかとなります。筆算と同じ手順で1桁ずつ小数部を求めていくと、

割り切れた(余りが 0 になった)なら、そこまでの桁で正確に表現できた。

1度出てきた余りが、再び現れたなら、循環した。

と区別できます。

2 つの整数 p, q を入力すると、 p / q を小数で表した時の、小数部を出力するプログラムを作成してください。 ただし、

結果が有限の桁で正確に表現できる時は、数値だけを 1 行に出力してください。

結果が循環小数になる時は次のように 2 行に出力してください。

最初の行に、循環する部分までの数字を出力してください。

次の行には、循環しない部分の下には空白を出力し、循環する部分の下には「^」を出力してください。

いずれの場合も数字列は 80 文字を超えることはないものとします。

Input

入力は複数のデータセットからなります。各データセットとして、p, q が空白区切りで１行に与えられます。データセットの数は 250 を超えません。

Output

データセットごとに、循環しない小数の場合は数値の小数部分を(この場合 1 行)、循環小数の場合は循環するまでの数字と循環する部分を示す記号「^」(この場合 2 行) を出力してください。

Sample Input

1 12
10000 32768
1 11100
1 459550

Output for the Sample Input

083
^
30517578125
00009
^^^
00000217604178
^^^^^^^^^^^^

Solution in JAVA (judge verdict: Accepted)

import java.io.*;
import java.util.*;

public class Main{
	public static void main(String args[]){
		try{
			new Main();
		}catch(IOException err){
			err.printStackTrace();
		}
	}

	public Main() throws IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		List<String> Ans = new ArrayList<String>();
		String line;

		while((line = in.readLine()) != null){
			List<Integer> rest = new ArrayList<Integer>();
			String[] dst = line.split(" ");
			int p = Integer.parseInt(dst[0]);
			int q = Integer.parseInt(dst[1]);

			if(p == 0 && q == 0){
				break;
			}

			rest.add(p);

			String num = "";
			String repeat = "";

			while(true){
				int x = 10 * p / q;
				p = 10 * p - x * q;
				num += Integer.toString(x);

				if(p == 0){
					break;
				}

				if(rest.contains(p)){
					int start = rest.indexOf(p);
					for(int i=0; i<rest.size(); i++){
						if(i<start){
							repeat += " ";
						}else{
							repeat += "^";
						}
					}
					break;
				}
				rest.add(p);


			}

			Ans.add(num);
			if(repeat.length() != 0){
				Ans.add(repeat);
			}
		}

		for(int i=0; i<Ans.size(); i++){
			System.out.println(Ans.get(i));
		}
	}
}