分數化小數(decimal)

輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點後c位. a, b <=10^6, c <= 100.輸入包含多組數據,結束標記爲a=b=c=0.spa

樣例輸入:code

1 6 4blog

0 0 0it

樣例輸出:io

Case 1: 0.1667class

分析: c 若是較大,就會超過double型的精度,不能簡單地printf("%lf"). 須要本身來計算小數位的數字. 這樣就應該用模擬豎式除法來計算了.數據

#include <stdio.h>

int main(void){
    int a, b,c;
    int result[101];
    while(scanf("%d%d%d",&a,&b,&c)!=EOF){
    if(a == b && b== c && c == 0){
        break;
    }
    int positive = a/b;
    while(a/b != 0){
        a = a%b;
    }
    for(int i=0; i <=c; i++){
        a = a * 10;
        result[i] = a/b;
        a = a%b;
    }
    if(result[c]>5){
        result[c-1]++;
    }
    for(int i = c-1; i >0; i--){
        if(result[i] >=9){
        result[i]=result[i]%10;
        result[i-1] +=(result[i]/10);
        }
    }
    if(result[0]>9){
        result[0] = result[0]%10;
        positive++;
    }
    printf("%d.",positive);
    for(int i=0; i<c;i++){
        printf("%d",result[i]);
    }
    printf("\n");
    }
    return 0;
}

注意進位處理,以及四捨五入.di

相關文章
相關標籤/搜索