帶分數計算程序思路
阿新 • • 發佈:2017-05-28
只需要 加減乘除 優點 1.2 組合 合數 表達式 循環 轉換成
思路一
1. 將帶分數用正則表達式轉換成整數+一個組合數的形式。 例如: 1+3*2^2/3-2 轉換成 1+3*(2+2/3)-2
2. 直接把結果算出來
3. 將結果的小數部分轉換成分數,也就是兩個整數比的形式 例如 1.23423423 提取小數部分 0.23423423 後, 設計算法找出這2個整數。
4. 最簡單的算法是雙重循環, for(i=0;i<10000;i++)for(j=0;j<100000;j++) ..... 但是這樣復雜度太高, 可以用每一次內循環的結果,比大小後,確定下一次內循環的範圍。
例如 0.23434432 <1/2 則範圍在 0/2 - 1/2 而1/2 < 2/3 分母循環到3的時候, 分子只需要遍歷 1/3 比大小後確定範圍在 0 - 1/3 依次類推 接下來遍歷 1/4 確定範圍在 0 -1/4 ..... 1/5 2/5 ...... 這樣可以將O(N^2)的復雜度降低到近似於O(N)。
缺點: 無法確定外循環要循環多少次才能找到結果, 結果可能不精確。
優點: 設計很簡單
思路二:
1. 將加減乘除的操作全部封裝,操作數可以為整數也可以是分數,對應4種組合 例如 1/2+1 -> 3/2 1/4 + 1/6 -> 10/24
2. 將原表達式轉換成後綴表達式,便於計算
4. 用棧的模型計算
3. 計算後的結果先去掉整數部分,然後約分,設定一個大概的範圍,比如100000, 然後遍歷 2-100000之間所有的素數,如果分子分母同時可以整數則約分,直到化成最簡分數
帶分數計算程序思路