1. 程式人生 > >表示式求值的程式碼和思路

表示式求值的程式碼和思路

#表示式求值

今天給大家帶來一道比較難的題,表示式求值

題目

題目描述:

求一個可以帶括號的小學算術四則運算表示式的值。 輸入格式: 一行,一個四則運算表示式。’‘表示乘法,’/'表示除法 輸出格式: 一行,該表示式的值,保留小數點後面兩位 樣例輸入: 3+4.5(7+2)(3)((3+4)(2+3.5)/(4+5))-34(7-(2+3)) 樣例輸出: 454.75

思路1

我們可以把一箇中綴表示式改成字尾,這樣就可以忽略括號

話不多說,Python3程式碼和C++程式碼奉上:

print("%.2f"%eval(input()))
#include<bits/stdc++.h>
using namespace std;
double factor_value(); double term_value(); double expression_value(); int main(){ printf("%.02lf",expression_value()); return 0; } double expression_value(){ double result=term_value(); bool more=true; while(more){ char op=cin.peek(); if(op=='+'||op=='-'){ cin.get(); double value=term_value
(); if(op=='+' )result +=value; else result-=value; } else more=false; } return result; } double term_value() { double result=factor_value(); while(true){ char op=cin.peek(); if(op=='*'||op=='/'){ cin.get(); double value=factor_value(); if(op=='*') result*=value; else result/=
value; } else break; } return result; } double factor_value(){ double result=0; char c=cin.peek(); if(c=='('){ cin.get(); result=expression_value(); cin.get(); } else{ while(isdigit(c)){ cin.get(); result=10*result+c-'0'; c=cin.peek(); } } return result; }