程序設計入門——C語言 第5周編程練習 1高精度小數(10分)


1

高精度小數(10分)

題目內容:

由於計算機內部表達方式的限制,浮點運算都有精度問題,為了得到高精度的計算結果,就需要自己設計實現方法。

(0,1)之間的任何浮點數都可以表達為兩個正整數的商,為了表達這樣兩個數的商,可以將相除的結果以多個整數來表示,每個整數表示結果的一位。即商的第一位用一個整數來表示,第二位用另一個整數來表示,以此類推,就可以輸出一個高精度的除法結果了。

如16/19的結果0.8421052631...就可以依次輸出8、4、2、1、0、5、2、6、3、1...。

而除法的過程,則可以模仿人工列豎式做除法的方式,先將被除數乘以10,得到一位商以后,將余數乘以10作為下一輪計算的被除數:

    160/19->8余8

    80/19->4余4

    ...

當某次余數為0時,則表明除盡。

現在,請寫一個程序,輸入一個分數,計算出它的小數形式。無論是否可以除盡,輸出最多小數點后200位。

 

輸入格式:

形如

    a/b

的兩個數,其中10<=a<b<100。也就是說,這個小數一定是小於1的正數。

 

提示:輸入是帶着兩個數中間的“/”的,所以scanf應采用“%d/%d”這樣的輸入格式。

 

輸出格式:

形如

    0.xxxxxxxxx

的小數,小數點后最多200位。輸出結束的時候要帶着回車換行。如果a/b是一個有限不循環小數,則輸出完所有的有效位就可以了,不需要再輸出后面的0來湊滿200位。

 

輸入樣例:

16/19

 

輸出樣例:

0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684

 

時間限制:500ms內存限制:32000kb

//
//  main.c
//  c yuyan
//
//  Created by anzhongyin on 2016/11/29.
//  Copyright © 2016年 anzhongyin. All rights reserved.
//

#include <stdio.h>
#include <math.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    // TODO Auto-generated method stub
    int a,b;
    int quotient=0;
    
    scanf("%d/%d",&a,&b);
    if (a<b&&a>0) {
        printf("0.");
    }
    for (int i=0; i<200; i++) {
        if(a*10>=b)
        {
            quotient=a*10/b;
            a=a*10%b;
            printf("%d",quotient);
        }
        else
        {
            a=a*10;
            printf("0");
        }
        if(a%b==0)
        {
            
            break;
            
        }
    }
    printf("\n");

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM