c語言:計算分數精確值(%、/真是十分有用的符號,化整爲零,化零爲整,倒敘,單取數字都可用它們~ )

計算分數精確值(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的正數。


輸出格式:

形如

    0.xxxxxxxxx

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


輸入樣例:

16/19


輸出樣例:

0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684

時間限制:500ms內存限制:32000kb
題目來源自mooc:c語言程序設計,僅供個人學習參考使用
<span style="font-family:KaiTi_GB2312;font-size:18px;">#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;
}</span>


發佈了49 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章