演算法競賽入門經典(第二版)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 分別記錄餘...