AOJ0113 Period
問題リンク Period
- 解法
除算の手順や循環の判定などは問題文にある通りです。
あとは実装するだけ。割り切れるケースなら難しくないですが、循環するケースの時は、2度目に出現した余りが最初何桁目に現れたかを調べればいいです。
- ソース
import java.util.Scanner; //Period public class AOJ0113 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int p = sc.nextInt(); int q = sc.nextInt(); int[] a = new int[q]; StringBuilder sb = new StringBuilder(); int k = 1; int r = p%q; int s = -1; int t = -1; a[r] = k++; r*=10; sb.append(r/q); r%=q; while(true){ if(r==0)break; if(a[r]>0){ s = a[r]; t = k; break; } a[r] = k++; r *= 10; sb.append(r/q); r %= q; } System.out.println(sb); if(s!=-1){ for(int i=0;i<t-1;i++){ if(s-1<=i)System.out.print("^"); else System.out.print(" "); } System.out.println(); } } } }