1. 程式人生 > >帶分數計算程序思路

帶分數計算程序思路

只需要 加減乘除 優點 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之間所有的素數,如果分子分母同時可以整數則約分,直到化成最簡分數

帶分數計算程序思路