[算法] 计算表达式的值
逆方法巴兰 或表达式树会结交新朋友,学习尴尬.
这是你可以阅读理解和应用一个非常简单的方法
简单的表达包括 2 操作 + 和 *
VD: 2*5+3+4*3+2
计算:
如果表达式允许 + 然后在第一个表达 + 表达式最后一节
相反,如果表达式可以允许 * 然后在第一个表达 * 端表达
相反地表达=本身的数量
插图: “2*5+3+4*3+2” = “2*5″+”3+4*3+2” = 2 * 5 + 3 +”4*3+2″= 2 * 5 + 3 +”4*3″+2 = 2*5+3+4*3+2
表达式包括算术 +, -, *
在我们的计算中添加表情符号 + 每个标记前 – (如果标 – 当时离开头)
计算方法为正常私自 –
表达式,包括数学 +, -, *, /
更多 + 前 –
更多 * 前 /
虽然数字改变,如果一个错误字符串去除了第一字符串的 - > 继续改变字符串,然后采取逆. 正常进行计算表达式仅 + 和 *
如果您在文章中使用这种算法,你, 请指定算法qvluom的作者的名字
ZIP与说明 4 操作 +, -, *, /
#include <sstream> #include <iostream> #include <cstdlib> #include <cstdio> #include <cctype> #include <string> using namespace std; int check_to_number(string s) //kiem tra la so { int check = 1, l = s.length(); for (int i = 1; i<l; i++) if (!isdigit(s[i]) && s[i] != '.') //duyt tu phan tu thu 2neu khong la so hoac thi check = 0 { check = 0; break; } if (s[0] == '-' && check == 1) return 2; //kiem tra dau xau co la - if (s[0] == '/' && check == 1) return 3; //kiem tra dau xau co la / if (isdigit(s[0]) && check == 1) return 1; //dau xau la so } float convert_to_number(string s) { float number, check = check_to_number(s); if (check > 0) { if (check == 1) //neu la so binhf thuong { stringstream ss (s); ss >> number; } if (check > 1) { stringstream ss (s.substr(1,s.length()-1)); ss >> number; if (check == 2) number = 0 - number; //neu la phep tru if (check == 3) number = 1/number; // neu la phep chia } return number; } } float process(string s, int l, int r) { int li = 0, ri = r; if (check_to_number(s)) return convert_to_number(s); //{ cout <<" "<<convert_to_number(s)<<endl; return convert_to_number(s);} else { int i; for (i=li; i<ri; i++) if (s[i] == '+') return process(s.substr(li, i-li), li, i) + process(s.substr(i+1, ri-i), i+1, ri-i); for (i=li; i<ri; i++) if (s[i] == '*') return process(s.substr(li, i-li), li, i) * process(s.substr(i+1, ri-i), i+1, ri-i); } return 0; } int main() { float number; string s; getline(cin,s); for (int i=0; i<s.length(); i++) { if(s[i] == '-') { s.insert(i,"+"); i++; } if(s[i] == '/') { s.insert(i,"*"); i++; } } cout<<s<<endl; number = process(s,0,s.length()); cout<<number<<endl; return 0; }
该算法通过qvluom (Quach范Lượm) 大约建议 2002 并广泛与陌生的名字公布 “Quach阮”. 正确的名称是 “Quach阮”. 这是算法设计简洁,易于理解, 很好地工作参数运算功能. 帕斯卡尔代码说明.
此代码计算功能的值LN; 操作 +, -, *, /. 加入正弦函数, COS, 黄褐色, … 极其简单.
正是这样, 感谢您的评论.
与小问题C代码, 当你输入表达式 (20+9)*(18+2)-1234/5, 结果是 333.2 但你的程序了 246.8, 您查看在您的帮助, 你的部门似乎有他的问题
啊, 谢谢. 这是事实,你的表现将成为含标志你的表情遗憾 ( 和 ). 你的程序不能与表达,使得仅公式计算 4 操作 +, -, *, / 喷气.
你珍惜你的家庭句子24 + 25 + 26 + 27 +…+122+123