fork(1) download
  1. import java.util.*;
  2.  
  3. /*
  4. プログラミングのお題スレ Part12
  5. ttps://mevius.5ch.net/test/read.cgi/tech/1538096947/628
  6.  
  7. 628 名前:デフォルトの名無しさん[] 投稿日:2018/11/21(水) 23:12:22.88 ID:jrFgFGaV
  8. お題:分数を小数に直したときの循環部分の周期を求める
  9. 割り切れる場合は0とする
  10. 例:
  11. 1/3 => 1
  12. 10/2 => 0
  13. 988027/983 => 982
  14. 919/870473 => 54288
  15. 1223/1476221 => ?
  16. 123412345/999999999 => 9
  17. 99998360006603 / 9999901 => ?
  18. */
  19. class Ideone
  20. {
  21. public static void main(String[] args)
  22. {
  23. try(Scanner in = new Scanner(System.in))
  24. {
  25. while(in.hasNextLine())
  26. {
  27. String[] strs = in.nextLine().split("/");
  28. long n = Long.parseLong(strs[0]);
  29. int d = Integer.parseInt(strs[1]);
  30. System.out.print(n + "/" + d + " => ");
  31. BitSet bs = new BitSet();
  32. for (int i = 0; i < d; i++)
  33. {
  34. n %= d;
  35. if (n == 0)
  36. {
  37. System.out.println(0);
  38. break;
  39. }
  40.  
  41. if (bs.get((int) n))
  42. {
  43. System.out.println(i);
  44. break;
  45. }
  46.  
  47. bs.set((int) n);
  48. n *= 10;
  49. }
  50. }
  51. }
  52. }
  53. }
Success #stdin #stdout 0.19s 2184192KB
stdin
1/3
10/2
988027/983
919/870473
1223/1476221
123412345/999999999
99998360006603/9999901
stdout
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => 122816
123412345/999999999 => 9
99998360006603/9999901 => 1999980