習題3 8 迴圈小數 UVa202

2021-10-19 07:33:21 字數 888 閱讀 7322

演算法競賽入門經典(第二版)p59 習題3-8 迴圈小數 uva202

這道題寫的時候,第一次感覺到數學、演算法的某種魅力。

剛開始一直想是否存在某種函式可以得到整數相除的,小數點後指定位數的結果,後發現不可行。然後在草稿上寫除法的計算過程時,發現對於除法a / b,餘數只有b種(0 ~ b-1),所以記錄每次除法運算的餘數,當餘數相等,則代表開始迴圈。

#include

#include

// 餘數等,開始迴圈

// 餘數有 b 種(0 ~ b-1) ,所以迴圈串最長為 b

intmain()

int flag =0;

for(m =

0; m < j-

1; m++)}

if(flag)

break

; a1 = b1[i-1]

*10;}

// 2 輸出

printf

("%d/%d = %d."

, a, b, b2[0]

);int n =1;

while

(n < i)

printf

("%d"

, b2[n++])

;}if(f1 && n == i)

printf

("(0)\n");

else

printf

(")\n");

printf

(" %d = number of digits in repeating cycle\n\n"

, f1?

1:i -

1- m)

;// 使用 ? : 簡化語句

}return0;

}

UVA 202 迴圈小數

題意 給出兩個數n,m,求n m的迴圈小數。並輸出是多少位。大致思路 模擬除法運算,而什麼時候就可以知道這是乙個迴圈節了呢,其實很簡單,就是第一次同一餘數出現兩次時就可以說他是乙個迴圈節了。比如1 6 第一次餘數為1,1作為餘數出現了,標記一下,表示1已經出現了,此時的1乘以10就會變成10,繼續模...

迴圈小數 UVa202

輸入整數a和b 0 a 3000,1 b 3000 輸出a b的迴圈小數表示以及迴圈節長度。例如,a 5,b 43,小數表示為0.116279069767441860465 迴圈位元組長度為21 這個題,忘了怎樣使a b的結果保留多位小數!具體方法為計算得出其多位小數 位數要足夠大 再判斷其週期,週...

UVA 202 迴圈小數

題目大意 輸入整數a,b 0 a 3000,1 b 3000 輸出 a b 的迴圈小數表示以及迴圈節長度。code include include includeusing namespace std const int maxn 300005 int rem maxn quo maxn 分別記錄餘...