用python计算2+4+6+…+20的值_计算2*3+(2*(5+6)*3)/2+4*6的值
#include#include#include#include#include#include#include
using namespacestd;bool isOper(charval)
{return ((val == '+') || (val == '-') ||(val == '*') || (val == '/') ||(val == '(') || (val == ')'));
}//把char*字符串拷貝到vector中
void myCopy(vector& container, char*v)
{while(*v != 0)
{if (isOper(*v))
{
container.push_back(*v);
}else{
container.push_back(*v - '0');
}
v++;
}
}void prtVecs(const vector& values, const vector&pris)
{//打印權重串
for(auto pri : pris)
{
cout<< " " <
}
cout<
for(auto val : values)
{if(isOper(val))
{
cout<< " " <
}else{
cout<< " " << (int)val;
}
}
cout<
}void prtVecs(const vector&values)
{//打印公式串
for(auto val : values)
{if(isOper(val))
{
cout<< " " <
}else{
cout<< " " << (int)val;
}
}
cout<
}//加減乘除計算
int realCal(int first, char oper, intsecond)
{if (oper == '+') return first +second;if (oper == '-') return first -second;if (oper == '*') return first *second;if (oper == '/') return first /second;return -1;
}/*權重計算:
數字權重固定是0,()權重固定是-1;
加減的基礎權重是1 乘除的基礎權重是2 ;
()括號控制附加權重0, (:附加權重+2 ):附加權重-2
[之所以選擇附加權重為2舉例: 2*(2+3)中要先算加法. 加的基礎權重1+附加權重2得到3;乘的基礎權重2+附加權重0得到2.所以會先算加法]
加減乘除的最終權重為 他的基礎權重+當前附加權重*/
//values公式串, pris公式串對應的權重串[in out]
int calPri(const vector& values, vector&pris)
{int basePri = 0; //附加權重
for(int i = 0; i < values.size(); ++i)
{if (!isOper(values[i]))
{
pris[i]= 0;
}if (values[i] == '(')
{
basePri+=2;
pris[i]= -1;
}if (values[i] == ')')
{
basePri-=2;
pris[i]= -1;
}if ((values[i] == '+') || (values[i] == '-'))
{
pris[i]= 1 +basePri;
}if ((values[i] == '*') || (values[i] == '/'))
{
pris[i]= 2 +basePri;
}
}
}//移除公式串和權重串中的括號字符
void removeParentheses(vector& values, vector&pris)
{for(int i = values.size(); i >= 0; --i)
{if ((values[i] == '(') || (values[i] == ')'))
{
values.erase(values.begin()+i);
pris.erase(pris.begin()+i);
}
}
}/*獲取可以計算的權重符的位置:
如果左邊操作符的權重>= 右邊操作符的權重,那么左邊操作符的左右數據可以進行計算
如果左邊操作符的權重< 右邊操作符的權重,那么需要右邊操作符和它的右邊操作符進行比較。*/
int getCalPos(const vector&pris)
{//pris[0]是左數字, pris[1]是操作符 pris[2]是右數字
for(int i = 1; i < pris.size(); i+=2)
{if(i+2
{if (pris[i] >= pris[i+2]) //如果左操作符的權重 >= 右操作符的權重,那么此左操作符可以計算
{returni;
}
}
}return pris.size() - 2;
}void calResult(vector& values, vector&pris)
{while(values.size() != 1)
{//獲取可以計算的操作符的位置,并進行左右數字和操作符的計算
int pos =getCalPos(pris);int result = realCal(values[pos-1], values[pos], values[pos+1]);//當左數字,操作符,右數字計算完后,刪掉操作符和右數組的位置,左數字的位置改成計算結果。然后繼續計算。//舉例2*3+4 計算2*3得出6,刪除*這個位置,3這個位置,2這個位置改成6.這樣公式變成6+4.下次循環繼續計算6+4
values.erase(values.begin()+pos+1);
pris.erase(pris.begin()+pos+1);
values.erase(values.begin()+pos);
pris.erase(pris.begin()+pos);
values[pos-1] =result;;
prtVecs(values);
}
}intmain()
{//原始字符串
char data[]="2*3+(2*(5+6)*3)/2+4*6";
vectorvalues;
myCopy(values, data);
cout<< "origin:"; prtVecs(values);//prtVecs(values, pris);//計算原始字符串的權重
vector pris(values.size(),0);
calPri(values, pris);//原始字符串去掉括號
removeParentheses(values,pris);//把括號去掉//prtVecs(values, pris);
calResult(values, pris);
cout<< "result:"; prtVecs(values);
}
總結
以上是生活随笔為你收集整理的用python计算2+4+6+…+20的值_计算2*3+(2*(5+6)*3)/2+4*6的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go mod依赖离线安装_go mod
- 下一篇: 乔治巴顿特警车叫什么