1140 Expanding Fractions
問題概要
正整数n,mが与えられる。n/mが割り切れるならそれを、そうでないなら最初の循環節の終わりまで小数を出力し、循環節の長さを出力せよ。
小数は50字ごとに改行せよ。
解法
筆算の割り算をしていく。すなわち、非除数に10をかけてmで割って……を繰り返す。
同じ余りが出たらそれは循環しているということなので、そこで終了する。
ソースコード
int n,m,r[1000]; int main() { while(scanf("%d%d",&n,&m),m) { rep(i,m)r[i]=-1; putchar('.'); for(int i=0,j=1;;i++,j++) { if(r[n]>=0) { printf("\nThe last %d digits repeat forever.\n",i-r[n]); break; } r[n]=i; if(j%50==0)puts(""); putchar('0'+n*10/m); n=n*10%m; if(n==0) { puts("\nThis expansion terminates."); break; } } } return 0; }