字串計算數值 模擬計算器運算

2021-08-21 20:59:22 字數 1929 閱讀 2841

時間限制: 1 sec  記憶體限制: 128 mb

提交: 61  解決: 27

[提交][狀態][討論版][命題人: 外部匯入]

小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有「(」,「)」,「0-9」,「+」,「-」,「*」,「/」,「^」求出的值就是密碼。小明數學學得不好,還需你幫他的忙。(「/」用整數除法,取商)

輸入共1行,為乙個算式。

輸出共1行,就是密碼。

1+(3+2)*(7^2+6*9)/(2)
258
100%的資料滿足:算式長度<=30 其中所有資料在2的31次方-1的範圍內。

還沒學資料結構,聽學過的大佬說做法是,開兩個棧,乙個存運算順序,乙個存數字。具體不太清楚。。。。。

這一題我的方法是模擬人腦運算,優先尋找(),其次^,然後*/,最後+-。前面的遇到乙個算乙個,然後把式子在字串中抹去,替代為剛剛算出的值,然後迴圈計算,直到沒有數字以外的符號,就可以退出迴圈了。。我大體思路是這樣。下面附上我的**。

#include #include#include#includeusing namespace std;

stacksta;

pair ,pair > f(string& s,int l)

i++;

}if(l-i!=0)

i--;

int start=l-i;

string st=s.substr(start,i);

a=atoi(st.c_str());

i=1;

while(s[l+i]<='9'&&s[l+i]>='0')

st=s.substr(l+1,i-1);

b=atoi(st.c_str());

int en=l+i-1;

pair ,pair > p(make_pair(a,b),make_pair(start,en));

return p;

}int val(string &s)

}for(int i=0;i,pair > p=f(s,i);

int cj=1;

int a=p.first.first,b=p.first.second;

if(s[i]=='+')

cj=a+b;

else

cj=a-b;

s.erase(p.second.first,p.second.second-p.second.first+1);

s.insert(p.second.first,to_string(cj));

i=0;}}

return atoi(s.c_str());

}int main(int argc, char *argv)

else

}i++;

}if(!sta.empty())

else

}

這是我的**。

然後我們來看看大佬的**。。。。

#include#include #include#include#includeusing namespace std;

int mypow(int a,int b)

s[w+1]=')';

s[0]='(';

s[w+2]='\0';

stacknum;

stackop;

for(int i=0;i恩,大佬寫的**比較簡潔。。。雖然我也還沒仔細看。但足以看出大佬與我們的不同。。。

這些**長度都不短,是否又有更快的方法?

有,但是就並非模擬了,考慮一下python的eval

print(eval(input().replace('^','**').replace('/','//')))

一行簡潔明瞭。

字串輸入計算器

一般會在喜歡考字串的筆試中遇到。1.無括號,簡單計算器設定 首先給出python 實現 class solution def calculate self,s str int d 0 sign res 0 for i in range len s if s i 0 d d 10 int s i if...

Python之字串計算(計算器)

import re expression 1 2 60 2 3 40.0 42425 5 9 2 5 3 357 553 3 99 4 2998 10 568 14 4 3 16 3 2 56 56 45 question eval expression print question def ari...

字串應用(計算器)

給定乙個包含正整數 加 減 乘 除 的算數表示式 括號除外 計算其結果。表示式僅包含非負整數,四種運算子和空格。整數除法僅保留整數部分。示例 輸入 3 2 2 輸出 7 答案 思路 1.碰到數字直接入棧 2.碰到空格,直接下一步 3.碰到 碰到 下乙個數字直接入棧 碰到 num入棧 num num ...