AOJ1180 Recurring Decimals

問題リンク Recurring Decimals

  • 解法

a_iからa_(i+1)を同じ整数が得られるまで続けます。
a_iからa_(i+1)を得る手順は
1. 文字列S = a_iとします
2. |S| < Lの間、S+="0"
3. Sを文字列配列cにしてソートする
4. cを先頭から読むと最大値、後ろから読むと最小値
5. a_(i+1)が求まる
としました。

  • ソース
import java.util.Arrays;
import java.util.Scanner;

//Recurring Decimals
public class AOJ1180 {

	void run(){
		Scanner sc = new Scanner(System.in);
		for(;;){
			int[] a = new int[21];
			a[0] = sc.nextInt();
			int L = sc.nextInt();
			if((a[0]|L)==0)break;
			for(int i=1;i<=20;i++){
				String s = a[i-1]+"";
				while(s.length()<L)s+="0";
				char[] c = s.toCharArray();
				Arrays.sort(c);
				int min = 0, max = 0;
				for(int j=0;j<L;j++)min=min*10+(c[j]-'0');
				for(int j=L-1;j>=0;j--)max=max*10+(c[j]-'0');
				a[i] = max-min;
				boolean f = false;
				for(int j=i-1;j>=0;j--)if(a[i]==a[j]){
					f = true;
					System.out.println(j+" "+a[i]+" "+(i-j));
					break;
				}
				if(f)break;
			}
		}
	}
	
	public static void main(String[] args) {
		new AOJ1180().run();
	}
}