1439: 2.4.5 Fractions to Decimals 分數化小數
時間限制:?1 Sec??內存限制:?64 MB提交:?194??解決:?13
題目描述
寫一個程序,輸入一個形如N/D的分數(N是分子,D是分母),輸出它的小數形式。 如果小數有循環節的話,把循環節放在一對圓括號中。例如, 1/3 = .33333333 寫成0.(3) 41/333 = 0.123123123... 寫成0.(123) 用xxx.0 成表示整數 典型的轉化例子: 1/3 = 0.(3) 22/5 = 4.4 1/7 = 0.(142857) 2/2 = 1.0 3/8 = 0.375 45/56 = 0.803(571428)
輸入
單獨的一行包括被空格分開的 N和D, 1 <= N,D <= 100000。
輸出
小數的表示方法上面說的很明白了,如果輸出的長度超過76個字符,每行輸出76個。
樣例輸入
<span class="sampledata" style="font-family: monospace; font-size: 18px; white-space: pre; background: none 0px 0px repeat scroll rgb(141, 184, 255);">45 56</span>
樣例輸出
<span class="sampledata" style="font-family: monospace; font-size: 18px; white-space: pre; background: none 0px 0px repeat scroll rgb(141, 184, 255);">0.803(571428) </span>
迷失在幽谷中的鳥兒,獨自飛翔在這偌大的天地間,卻不知自己該飛往何方……
- #include?<stdio.h>??
- #include?<string.h>??
- #define?N?100010??
- int?rm[N],c;??
- char?buf[N],dev[N];??
- int?main()??
- {??
- ????int?m,n,i;??
- ????scanf("%d%d",&m,&n);??
- ????sprintf(buf,"%d.",m/n);??
- ????memset(rm,?-1,?sizeof(rm));??
- ????m?=?m?%?n;??
- ????dev[0]?='0';??
- ????for(i=?0;;?i++)??
- ????{??
- ????????if(m==0)??
- ????????{??
- ????????????sprintf(buf?+?strlen(buf),"%s",?dev);??
- ????????????break;??
- ????????}??
- ????????if(rm[m]!=?-1)??
- ????????{??
- ????????????sprintf(buf?+?strlen(buf),?"%.*s(%s)",?rm[m],?dev,?dev?+?rm[m]);??
- ????????????break;??
- ????????}??
- ????????rm[m]?=?i;??
- ????????m?*=?10;??
- ????????dev[c++]?=?m?/?n?+?'0';??
- ????????m?=?m?%?n;??
- ????}??
- ????for(i?=?0;?i<(int)strlen(buf);?i+=76)printf("%.76s\n",?buf?+?i);??
- ????return?0;??
- }??