小數化分數(C )

2021-10-02 09:47:47 字數 1209 閱讀 4995

【問題描述】

任何小數都能表示成分數的形式,對於給定的小數,編寫程式其化為最簡分數輸出,小數包括簡單小數和迴圈小數。

【輸入形式】

第一行是乙個整數n,表示有多少組資料。

每組資料只有乙個純小數,也就是整數部分為0。小數的位數不超過9位,迴圈部分用()括起來。

【輸出形式】

對每乙個對應的小數化成最簡分數後輸出,佔一行

【樣例輸入】

30.(4)

0.50.32(692307)

【樣例輸出】

4/91/2

17/52

【解題思路】

【示例**】

#include

#include

#include

using

namespace std;

intzdgyz

(int

,int);

intmain()

for(

int t=

0;tint c[9]

=;for(

int i=

2;i)else

}for

(int j=

2;j)else}}

}int x=1;

double z=0;

z=pow(

10.0

,s1)

;for

(int i=

0;i)else

} x=x*z;

int p=

0,q=

0,o=0;

for(

int j=

0;j)for

(int k=

0;k(s2==0)

else

int m=

0,e=

0,f=0;

m=zdgyz

(x,o)

; e=x/m;

f=o/m;

cout<

"/"<

}return0;

}int

zdgyz

(int p,

int q)

}return f;

}

若有更優方法,歡迎交流學習!

小數轉化分數

這個演算法的根本原理是 乙個分數對應一條直線的斜率。用數學語言描述就是 一條直線的斜率是無窮大 垂直於x軸 或者是 y2 y1 x2 x1 我們要做的就是找到2個整數,在指定的精度範圍內接近這個斜率。對於正數來說,我們設定分子為0,分母為1,然後比較這個分數同給定的十進位制數。如果我們的分數太小了 ...

hdu 1717 小數化分數2

0.325656 9900 3256.5656 32.5656 0.325656 9900 3256 32 所以,0.325656 3224 9900 將純迴圈小數改寫成分數,分子是乙個迴圈節的數字組成的數 分母各位數字都是9,9的個數與迴圈節中的數字的個數相同.將混迴圈小數改寫成分數,分子是不迴圈...

無限迴圈小數化分數

迴圈小數分為混迴圈小數 純迴圈小數兩大類。混迴圈小數可以 10 n n為小數點後非迴圈位數 所以迴圈小數化為分數都可以最終通過純迴圈小數來轉化。無限迴圈小數,先找其迴圈節 即迴圈的那幾位數字 然後將其展開為一等比數列 求出前n項和 取極限 化簡。例如 0.333333 迴圈節為3 則0.33333....