/**********************************************************************
 * プログラミング演習 レポート課題
 * B-2 サンプルデータ 3
 * (C) 2006 Hirohisa AMAN <aman@cs.ehime-u.ac.jp, aman@computer.org>
 *-------------------------------------------------------------------
 *
 * 2 つの自然数 x, y を読み込み, x/y の値を小数点以下 100 桁まで表示.
 * ただし,循環小数になる場合は,循環する範囲を [ ] で囲んで表示する.
 *
 **********************************************************************/
#include <stdio.h>

int main(void){
  int x, y, i, j;
  int begin, end; /* 循環小数の始まりと終りの位置 */
  int quo[100], mod[100]; /* 商と余りの配列 */

  /* x, y の読み込み */
  do{
    printf("x(>0) = ? ");
    scanf("%d", &x);
  }
  while( x <= 0 );

  do{
    printf("y(>0) = ? ");
    scanf("%d", &y);
  }
  while( y <= 0 );
  
  /* 整数部分の表示 */
  printf("x/y = %d", x/y);

  x %= y;
  if ( x == 0 ){
    printf("\n");
    return 0;
  }

  /* 小数部分の表示 */
  begin = end = 100;
  printf(".");
  for ( i = 0; i < 100; i++ ){
    if ( x == 0 ){ /* 割りきれた場合,そこでストップ */
      break;
    }
    mod[i] = x;
    x *= 10;
    quo[i] = x/y;
    x %= y;
    for ( j = 0; j < i; j++ ){
      /* 以前に同じ余りがあれば,循環小数 */
      if ( mod[j] == mod[i] ){
        begin = j;
        end = i;
        break;
      }
    }
    if ( begin != 100 ){
      break;
    }
  }  

  j = 0;
  while ( j < begin && j < i ){
    printf("%d", quo[j]);
    j++;
  }

  if ( begin < 100 ){
    printf("[");
    for ( j = begin; j < end; j++ ){
      printf("%d", quo[j]);
    }
    printf("]");
    for ( j = end; j < i; j++ ){
      printf("%d", quo[j]);
    }
  }

  printf("\n");

  return 0;
}