小數轉化分數

2022-09-07 03:15:08 字數 2036 閱讀 7018

這個演算法的根本原理是:乙個分數對應一條直線的斜率。用數學語言描述就是:一條直線的斜率是無窮大(垂直於x軸)或者是(y2-y1) / (x2-x1),我們要做的就是找到2個整數,在指定的精度範圍內接近這個斜率。對於正數來說,我們設定分子為0,分母為1,然後比較這個分數同給定的十進位制數。如果我們的分數太小了(比如,我們選擇的點在直線的下面),我們就加大分子的值直到這個分數太大(比如,這個點在直線的上方),之後我們在增加分母的大小直到這個點在直線下方。如果我們的最終目標是無理數(無限不迴圈小數),這個演算法將一直繼續,增加分子和分母,直到最終結果在指定的精度上。12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

3132

3334

3536

3738

3940

4142

4344

4546

4748

4950

5152

53#include

#include

#include

intmain()

if(abs(idecimal) >= 1)//如果輸入大於等於1,則分解為整數部分和小數部分

daccuracy = 0.0001;//設定精度

inumerator = 0;//初始分子

idenominator = 1;//初始分母

inegative = 1;//負數標誌

if(idecimal <0)

inegative = -1;

dfraction = 0;

while(fabs(dfraction - ddecimal) > daccuracy)//判斷精度是否達到要求

if(abs(idecimal) >= 1)

cout << dinteger <<'+'<<'('<< inumerator <<'/'<< idenominator <<')'<< endl;

else

cout << inumerator <<'/'<

return0;

}

小數化分數(C )

問題描述 任何小數都能表示成分數的形式,對於給定的小數,編寫程式其化為最簡分數輸出,小數包括簡單小數和迴圈小數。輸入形式 第一行是乙個整數n,表示有多少組資料。每組資料只有乙個純小數,也就是整數部分為0。小數的位數不超過9位,迴圈部分用 括起來。輸出形式 對每乙個對應的小數化成最簡分數後輸出,佔一行...

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....