計算器核心演算法 二

2021-07-07 04:02:55 字數 1459 閱讀 3114

前面呢,我們實現了沒有括號的混合運算,現在我們需要解決混合運算的等式中有多重的括號的等式,其實這個問題換乙個角度想其實非常簡單的,來,北鼻,跟著我一起......

回歸正題。。。

說白了就是把"(2+3*3)"替換成"11"   思路明白了吧?就是把最裡面的一對括號裡面的內容先計算,然後計算結果替換那對括號.好,開工!

第一步:找到最裡面的一對括號

為什麼要找到最裡面的一對括號呢,原先我們能計算除了括號的混合運算,現在加了括號,原先的parse方法又不認識了,parse方法只認識沒有括號的,所以這裡你要做的工作就是找到括號,然後計算括號裡面的字串,然後替換括號的位置

1.找到最裡面的那一對括號  "(2+6-(2*2+1)) + (2*2+5)"   對於這個字串最裡面的括號就是"(2*2+1)" 因為這對括號裡面已經沒有括號了,所以我們找的就是這樣子的括號

2.計算括號裡面的字串,然後完成替換

在parse方法的最前面加了一層判斷,也就是**如果走到這個判斷下面了,就代表這個等式已經沒有括號了,因為有括號就在if語句裡面直接返回了

還是拿上面的"(2+6-(2*2+1)) + (2*2+5)"為例,找到的最裡面的一對括號為"(2*2+1)"

對裡面的資料進行計算,替換原來的位置,也就是"(2+6-

"     "5"      ") + (2*2+5)" 

這三個字串進行拼接,也就是-->"(2+6-5) + (2*2+5)

",然後又呼叫自己,又有括號,又替換括號部分.....最後結果duang的一下就出來,這是特技!請不要相信!!!

最後奉上計算結果圖:

附上完整parse方法源**

/**

* 實現混合運算

* * @param content

* @return

*/public static double parse(string content)

int index = content.indexof("+");

if (index != -1)

// 這裡

index = content.lastindexof("-");

if (index != -1)

// 這裡

index = content.indexof("*");

if (index != -1)

// 這裡

index = content.lastindexof("/");

if (index != -1)

return double.parsedouble(content);

}

QT簡易計算器 表示式計算核心演算法(二)

概述 上篇我主要介紹了用qt做計算器的整個流程,這次主要就是分析一下,計算器表示式計算的演算法部分。因為也找了很多別人寫的 但大多都是只支援個位數的加減乘除,小數也不支援,所以就在原有框架上,修改,優化,讓其滿足我想要的功能。1,表示式計算思路。表示式資料操作符分割 轉為逆波蘭表示式 計算逆波蘭表示...

演算法提高 計算器

問題描述 王小二的計算器上面的led顯示屏壞掉了,於是他找到了在計算器維修與應用系學習的你來為他修計算器。螢幕上可以顯示0 9的數字,其中每個數字由7個小二極體組成,各個數字對應的表示方式如圖所示 為了排除電路故障,現在你需要計算,將數字a變為數字b需要經過多少次變換?注意 現在將其中每段小二極體的...

演算法提高 計算器

問題描述 王小二的計算器上面的led顯示屏壞掉了,於是他找到了在計算器維修與應用系學習的你來為他修計算器。螢幕上可以顯示0 9的數字,其中每個數字由7個小二極體組成,各個數字對應的表示方式如圖所示 為了排除電路故障,現在你需要計算,將數字a變為數字b需要經過多少次變換?注意 現在將其中每段小二極體的...