計算分數精確值 翁愷老師C語言程式設計CAP第8章編程題

來源:互聯網
上載者:User

標籤:xxxxx   ret   方法   size   scan   現在   表達方式   12px   浮點數   

題目內容:

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

(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的正數。

輸出格式:

形如

    0.xxxxxxxxx

的小數,小數點後最多200位。輸出結束的時候要帶著斷行符號換行。如果a/b是一個有限不迴圈小數,則輸出完所有的有效位就可以了,不需要再輸出後面的0來湊滿200位。

輸入範例:

16/19

輸出範例:

0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684

時間限制:500ms  記憶體限制:32000kb
#include <stdio.h> int main(){    int a, b;    int x;    int n=0;    scanf("%d/%d",&a,&b);    printf("0.");    while(n<200){    a = a * 10;    x = a / b;    printf("%d",x);    a = a % b;    n++;    if( a == 0){        break;        }    }        return 0;}

 

計算分數精確值 翁愷老師C語言程式設計CAP第8章編程題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.