我的任務是在小數點後面找到第k個位置的數字( A/b)。 昨天我發現了這個算法。
爲了得到小數點後的任何數字,我產生一個叫做REM變量,並循環在a,b,k爲非常大的整數(小於10e18)的小數點a/b的小數點後面找到第k個數字
for (int i = 1; i <= k+1; i++)
{
rem = a%b;
a = rem*10;
}
cout << a/b;
循環將返回一個值是小數點後的第k個位數。
但是這個任務要求我用a,b,k計算非常大的數字(小於或等於10e18),所以它確定代碼將超出時間限制。
- 查找重複前的位數。這是分母中2和5因素的數量中較大的一個。
- 如果k不超過位數,請運行for循環。
- 否則,我們仍然會運行for循環到k + 1。將除法餘數的值存儲在變量x中。
- 使用上面相同的內容運行while循環,直到餘數再次具有x的值。此後,將該分部的每個商都存儲到數組名qut中。
- while循環終止後,數組將存儲重複內的每個數字。根據陣列中的位數,我們可以計算第k位。
然而,該算法仍然被證明是耗時的,因爲在a和b是兩個連續整數的情況下,重複變得非常大。 你能幫我一下嗎?
如何**大**是a,b,k?你能指定一個**範圍**嗎? – progyammer
如果所有的變量都適合64位,那麼除了b超過10 * b溢出之外沒有其他要做的事情了 –
如果所有變量都是「整數」,那它們怎麼會小於或等於10e18 * * ??據我所知,C++中整數的最高限制是'unsigned long int'的大小約爲'4.29e9'。 – progyammer