【問題描述】
任何小數都能表示成分數的形式,對於給定的小數,編寫程式其化為最簡分數輸出,小數包括簡單小數和迴圈小數。
【輸入形式】
第一行是乙個整數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....