看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《winterboy209 (鼕鼕)》之銘言: : 給定一分數,求出此分數以十進位數字表示小數部分循環的數字(第一次循環) : ex:輸入:1/14 : 輸出714285 : (因為1/14=0.0714285714285714285) : 以Microsoft 6.0 c++ 撰寫 : 完全不知道如何下手....拜託了謝謝 我用嘴巴幫你寫吧... 先想到的是,怎麼判斷循環... 1. 就給他除, 除了之後找重複出現的字串...? 這樣好像有道理, 可是實際上不對... 例如 1231231234/10000000=123.1231234 你會看到123 123,就以為他是循環... 阿要是後面那個4超過double的精準度...就錯了。 2. 那就自己寫除法。 z=0 x=1 y=14 m=0 z=0.1 x=10 y=14 m=0 z=0.01 x=100 y=14 m=0 --> 除 m= 100-14*7=2 m是餘數, z 不是商, 因為商不重要, 只是讓你知道除到第幾位 z=0.001 x=2 y=14 m=0 所以,只要x < y, 就把x*10, 記錄一下商(因為等一下商就是循環) 然後把x換成除完的餘數... 一直遇到餘數等於原來的被除數, 就是一個循環了 因為, 餘數 = 1的話, 照樣要除以14, 只是小了 10^n 倍而已... 所以當然也會一直循環... -- 2009年 愛滋感染人數統計 異性性行為女 42 異性性行為男 273 同性性行為男 895 台灣2005年起實施孕婦非強迫愛滋篩檢,2008年起強制新生兒篩檢。 每年有約1%的孕婦接受篩檢,每年有大於1%的異性性行為者接受篩檢。 同性戀人口雖然只佔5%-10%,但是因為接受篩檢的比例是異性戀 1%的好幾好幾倍 所以陽性的人口數才會看起來好像比較多 詳情請看ptt.cc L_BoyMeetsGi 版 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.186.67
maplefog:遇到同一被除數就跳出感覺怪怪的 例如0.242323242323... 05/29 17:27
maplefog:或0.2222422224...之類的 所以覺得算到小數後第60位後 05/29 17:39
maplefog:再用字串判斷第一次循環小數是多少 05/29 17:41
mantour:遇到同一被除數就會循環了 05/29 17:56
mantour:一樓應該是有什麼地方弄錯了 05/29 17:57
mantour:你說的 0.242323242323... = 242323/999999 05/29 18:02
mantour:0.2222422224 = 22224/99999 05/29 18:03
mantour:0.2222422224... = 22224/99999 05/29 18:03
mantour:自己用長除法除一下就知道這個做法是對的 05/29 18:03
winterboy209:1/6=0.166666666666666666 輸出6 05/29 18:04
mantour:用商數來判斷循環基本上就是錯的 05/29 18:04
mantour:就算你算到60位還是可能錯 05/29 18:05
bleed1979:儲存每一次的商數+被除數,ACM測資循環破千位。 05/29 19:44
jlovet:一樓,我是說同一個被除數,不是同一個商, 05/29 21:45
jlovet:不然隨便小數點下十位就over了 05/29 21:45
walker2009:假設分數是 m/n , 由於除以n最多只會有 0~n-1 這些餘數 05/30 23:44
walker2009:設個 flag[n] , 初始為0, 如果做長除法時某個餘數出現 05/30 23:45
walker2009:某個餘數r出現在位置p 05/30 23:46
walker2009:if(flag[r]==0) flag[r]==p; 05/30 23:47
walker2009:else 這個餘數之前出現過, 因此有循環小數! 05/30 23:47
walker2009:http://tinyurl.com/25xrhcp page 3~5 05/31 00:15