C語言 分數化小數
阿新 • • 發佈:2019-01-05
輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點後c位。a,b≤10 6 ,c≤100。輸入包含多組資料, 結束標記為a=b=c=0。
樣例輸入:
1 6 4
0 0 0
樣例輸出:
Case 1: 0.1667
這道題靠計算機本身來做除法是會出現精度問題的,所以要模擬數學上的除法:
#include <stdio.h>
int main()
{
int a, b, c, ct = 1;
while(3 == scanf("%d%d%d", &a, &b, &c))
{
if(0 == a && 0 == b && 0 == c) break;
int integer = a / b; // 獲得整數部分
printf("Case %d: %d.", ct++, integer);
a %= b; // 獲得餘數
int i = 1;
// 進行c-1次模數學擬除法求出小數點後c-1位,因為要四捨五入,所以最後一位單獨處理
while(i++ < c)
{
a *= 10;
printf ("%d", a / b);
a %= b;
}
a *= 10;
// 判斷最後一位的下一位是否大於5,進行四捨五入
printf("%d\n", ((a % b) * 10 / b > 5) ? (a / b + 1) : (a / b));
}
return 0;
}