TSOJ課程 06 1373 計算器1

2021-09-13 16:06:36 字數 2082 閱讀 6714

題目描述:

給定一行表示式,中間沒有空格,輸出表示式的計算結果。測試資料保證在 int 範圍之內。

這是簡單的乙個題目,只涉及加法和減法。

輸入描述:
一行表示式

輸出描述:
表示式的計算結果

樣例輸入:
12+21-0

樣例輸出:
感動中國,終於有一道像樣的演算法題了(雖然好像不是很難)

最簡單的計算表示式題。因為是在是非常簡單,沒有括號、乘除,所以就沒有計算優先度這種問題,從左往右算就可以了,所以甚至連字尾表示式都不需要拿出來。

這裡我用了乙個有點類似於棧的東西,沒有接觸過棧的同學可以感受一下這個感覺。

思路非常簡單:首先讀取表示式,然後從前往後讀取。表示式涉及了兩種運算——加法和減法。但是其實減法不就是加上了乙個負數嗎。所以我將減法理解為加法,而減號理解為負號,這樣我們只需要一路加下去就可以了。

什麼意思呢,比如21+12-5,正常的理解就是先把21+12算出來,然後把結果減掉5。但是我不這麼理解,我把他理解為三個數字:21,+12,-5,然後求他們的和。

首先說思路:

讀取了表示式exp以後,我申請了乙個變數temp,型別是string。這個temp是用來暫時儲存一些字串的。我們把輸入給的字串從頭開始處理,如果是數字,我們就把他追加到temp裡去,直到碰到乙個符號(+或-),我們把temp裡的東西轉化為數字,加到res裡去,然後清空temp,並把碰到的這個符號加到temp裡去。

光這麼講可能有點難理解,舉個例子,21+13-5:

剛開始讀2,然後讀1,這個時候temp裡是「21」,res是0。繼續往下,這個時候讀取到+了,把temp轉化為數字21,加到res裡,然後清空temp,並且把剛剛碰到的加號放進去,這個時候變數的情況是這樣的:

res=21, temp="+", exp讀取到了』+』

然後繼續,讀1,讀3,這個時候temp裡是「+13」(別忘了之前放了個加號進去),res是21。繼續往下讀到-號,把temp轉化為數字13(正號就自動省略了),加到res裡,清空temp,把碰到的減號放進去。變數情況:

res=34, temp="-", exp讀到了』-』

然後再繼續,讀5,再往下就讀完了,沒有了,這個時候temp裡是「-5」,把他轉化為數字-5,加到res裡,此時res=29。正是21+13-5的結果。

這個思路巧妙的用正號和負號避開了加減的處理,只需要無腦加就行了。但是有個問題:讀到最後字串讀完了可就直接跳出了,我們還需要手動寫幾行**來處理temp裡讀取的最後乙個數字「-5」,因為我們這個**只有碰到符號的時候才會把數字加到res裡。

我的解決方法很簡單,就是在字串尾部人為追加乙個+號。這樣在讀取的時候,讀到最後就會碰到這個加號,從而把temp裡的數字加到res裡。短短一行**,就解決了乙個單獨處理的問題,豈不美哉!!

這個**還需要講解幾個新知識點:

第二是string的4個高階用法:

length,用法是變數名.length(),返回這個字串的長度。效果類似於c語言裡的strlen。

clear,用法是變數名.clear(),效果是清空這個字串。

// tsoj-1373 計算器1

/* 因為題目說明只涉及加法和減法

* 此處就不將其轉化為字尾表示式再計算了

* 直接以中綴表示式計算 */

#include

#include

#include

using

namespace std;

intmain()

else

} cout<}return0;

}

有空再寫乙個char版本的,幫助還沒從c語言轉化到c++的同學們

c語言課程設計 計算器

include include include define pi 3.14159265358979323846264338327 define max 20 define e 2.71828 載入進入計算器需要輸入的指令 void initnews 加法 void sum double x,dou...

C 計算器程式設計教學課程前言

最近完成c 計算器程式設計,模仿win7的基本型,但有所超越。除了完成90 的功能,還新增了多項式,支援鍵盤輸入,算式保留,根據中國人習慣作了改進。程式運用了c 的基本功能,包括介面 繫結 物件導向 事件 字段封裝 多種迴圈 集合操作 操作符過載 string的多種操作等,同時實現先乘除後加減的功能...

實現計算器

dim boldot as boolean dim dblacc1,dblacc2 as double dim dblacc3 as double 10 dim strop as string private sub add num byval intnumber as integer if bol...