1. 程式人生 > >C 語言 分數化小數

C 語言 分數化小數


輸入正整數 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; }

輸入正整數 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;
}