分數化迴圈小數(純 混)

2021-08-15 22:26:48 字數 873 閱讀 5480

網上看到這個問題,查了一下除了字串查詢沒看到別的解法,自己寫了乙個,要考慮一些特殊情況,比如除0,負數等等,時間複雜度n^2,小數點長度n大於一萬就慢了,感覺**還能再優化一下,最多跑過11111111/59595961,一共591萬位,release要跑20秒5g記憶體,再大記憶體就不夠了。

寫的亂七八糟的,不寫點注釋以後估計自己都看不懂。

#include 

#include

using

namespace

std;

int main()

if (a == 0)

if (float(a) / float(b) < 0) cout

<< "-";//負數判斷

a = abs(a);

b = abs(b);

quotient = a / b;

a -= quotient * b;

while (upperlimit *= 3,1) };

auto validate = [&]()

return

true;

};auto searchrepetation = [&]() ;

if (hasrepeat() && validate())

if (back - front == 1 && rem[front] == 0)

}else

cout

<< ")";

}return

true;}}

return

false;

};if (searchrepetation()) break;

}::system("pause");

}

迴圈小數轉化為分數

眾所周知迴圈小數是可以轉化為分數的。把迴圈小數轉化為分數一般用極限的方法,比如0.33333.可以看成是0.3 0.03 0.003 這個等比數列的值,然後求等比數列的和,設有n個數,則根據等比數列公式得和為0.3 1 0.1 n 1 0.1 化簡得 1 0.1 n 3,n為無限多個,n趨於無窮大時...

無限迴圈小數化分數

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

如何將迴圈小數化為分數

一 無限迴圈小數怎樣化為分數?公式 第一種 這個公式必須將迴圈節的開頭放在十分位。若不是可將原數乘10 x x為正整數 就為 12.121212 0.121212 12 100倍 1倍 99 99和12之間一條分數線 此公式需用兩位數字,其中兩位數差出乙個迴圈節。再舉乙個例子 0.00121212 ...