AOJ 0113 Period

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0113
面倒くさそうでずっと放置していた問題。
簡単な問題なんだと思いますが、自分はめっちゃ手間取りました。商とあまりの対応付けみたいなものがうまくプログラムに出来ていなくて大変でした。

int ans[100];
int mod[100];

main(){
  int p,q;
  while(cin>>p>>q){
    int pos=0;

    p*=10;
    while(pos<100){
      ans[pos]=p/q;
      mod[pos]=p;
      p%=q;
      p*=10;
      ++pos;
    }


    if(mod[99]){
      int ms=0,mt;
      for(;;ms++){
	for(mt=ms+1;mt<100;mt++){
	  if(mod[ms]==mod[mt])break;
	}
	if(mt<100)break;
      }

      rep(i,mt)cout<<ans[i];
      cout<<endl;
      rep(i,ms)cout<<' ';
      rep(i,mt-ms)cout<<'^';
      cout<<endl;
    }else{
      for(int i=0;mod[i];i++)cout<<ans[i];
      cout<<endl;
    }
  }
}