Test Message

a248: 新手訓練 ~ 陣列應用

內容

大家都知道,小算盤的小數運算只能算出小數點後三十幾位

但好奇的桑葉想知道更精準的小數值

請你幫可憐的桑葉做出可以算出精準的小數運算的程式


輸入

每次輸入有三個正整數 a , b , N

1<= a , b <= 2147483647 1 <= N <= 10000

( 輸入不會超過 1000 筆 )

18467 41 10
26500 6334 10
15724 19169 10
10 5 3

輸出

請輸出 a / b 的小數運算結果

精準到小數點後 N 位

第 N 位以後請無條件捨去

450.4146341463
4.1837701294
0.8202827481
2.000


解題思路

除法每當要算下一位小數時會把餘數 * 10 當成被除數繼續給除數除。
所以能得到以下公式 :

這次的被除數 = (上次的餘數 % 除數) * 10

程式部分先把小數點以上的輸出,以下的就用剛才得到的公式配合迴圈去求即可。


完整程式碼

AC (49ms, 100KB)
#include<stdio.h>

int a, b, n;
char output[10010], * oTop;

int main()
{
while (scanf(" %d %d %d", &a, &b, &n) == 3)
{
oTop = output;
printf("%d.", a / b);
while (n--)
{
a %= b;
a = (a << 3) + (a << 1);
*oTop++ = (a / b) + '0';
}
*oTop = '\0';
puts(output);
}
return 0;
}