關於C#作業計算器的一個突發奇想

    C#的計算器作業埋頭做了大半天終於弄出了個大概,對於題目要求裏面的那句“麻雀雖小五臟俱全”有很大的感觸,叫一個同學作爲第一個(估計也是最後一個)用戶幫忙測試了下才發現BUG能有如此之多,應該說是自己沒能想到的BUG是如此之多。一怒之下寫了長篇大論去左修修右補補的,貌似終於出了個較爲滿意的結果。不過這兩天跟同學討論了一下才發現關於科學計算的那部分是能用堆棧完成的,聊着聊着才突然發現自己好像壓根沒想過用堆棧。

    話不多說先把自己關於這道題的小構思說一下,就是在保證輸入正確的情況下把整個算式(當然不包括等於號咯)作爲字符串先存下來,然後通過加減乘除加以分隔以達到提取算式的各個數值的目的再進行計算,這樣的方法在普通計算裏面是可行的,但要考慮到乘除法和加減法的順序後就不可行了。於是也不知道當時自己是怎麼想的居然想到這麼一個方法,如果要考慮到運算順序的話,先用加減號把字符串隔開,這裏用"1+2*3+5”做一個例子,就得到了"1" "2*3""5"這三個子字符串了,然後按順序遍歷這3個子字符串並對他們進行乘除號的分隔,就得到("1")("2""3")("5")這四個結果,那麼程序就可以根據每個子字符串的長度判別用乘除號分隔後的子字符串是否爲單個數值或者是帶乘除後的算式,最後對帶乘除號的算式進行計算並把結果返還到用加減號分隔的子字符串中,上例就得到"1""6""5",然後程序退出遍歷,重新用加減法計算"1+6+5"便能得到"12"這個結果了。

    相比用棧去存取算式無疑上述方法更爲複雜,不過也算是自己做題時摸索出來的一種思路,覺得是一種可行的方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章