博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++:计算器
阅读量:4059 次
发布时间:2019-05-25

本文共 2293 字,大约阅读时间需要 7 分钟。

支持加,减,乘,除,嵌套小括号,正整数阶乘。

/** 20171111*/#include 
#include
#include
#include
#define eps 0.00001const char s[] = {
'(',')','+','-','*','/','^'};struct Node{ char tp; double va; Node(char tp,double va){
this->tp=tp;this->va=va;}};bool is_operator(char c){ int len = strlen(s); for(int i=0;i
t){ while(!t.empty()) { printf("%c %f\n",t.front().tp,t.front().va); t.pop(); }}double solve(std::queue
p){ if(p.size() <= 1) return p.front().va; //处理括号 std::queue
vbracket; int cnt = 0; while(!p.empty()) { if(p.front().tp == '(') { p.pop(); std::queue
vbt; while(!p.empty()) { if(p.front().tp == ')') { if(cnt==0) { p.pop(); break; } cnt--; }else if(p.front().tp == '(') cnt++; Node tt(p.front().tp,p.front().va); vbt.push(tt); p.pop(); } Node t(' ',solve(vbt)); vbracket.push(t); }else { Node t(p.front().tp,p.front().va); vbracket.push(t); p.pop(); } } //处理阶乘 std::queue
vfactorial; double va; while(!vbracket.empty()) { if(vbracket.front().tp == '^') { vbracket.pop(); do_operator(va,'^',vbracket.front().va); }else if(vbracket.front().tp == ' ') { va = vbracket.front().va; }else { Node t1(' ',va); vfactorial.push(t1); Node t2(vbracket.front().tp,vbracket.front().va); vfactorial.push(t2); } vbracket.pop(); } Node t0(' ',va); vfactorial.push(t0); //处理乘除 std::queue
vMultiAndDiv; va = 0; while(!vfactorial.empty()) { if(vfactorial.front().tp == '*'|| vfactorial.front().tp == '/') { char vt = vfactorial.front().tp; vfactorial.pop(); do_operator(va,vt,vfactorial.front().va); }else if(vfactorial.front().tp == ' ') { va = vfactorial.front().va; }else { Node t1(' ',va); vMultiAndDiv.push(t1); Node t2(vfactorial.front().tp,vfactorial.front().va); vMultiAndDiv.push(t2); } vfactorial.pop(); } Node t3(' ',va); vMultiAndDiv.push(t3); //处理加减 va = 0; while(!vMultiAndDiv.empty()) { if(vMultiAndDiv.front().tp == '+'|| vMultiAndDiv.front().tp == '-') { char vt = vMultiAndDiv.front().tp; vMultiAndDiv.pop(); do_operator(va,vt,vMultiAndDiv.front().va); }else { va = vMultiAndDiv.front().va; } vMultiAndDiv.pop(); } return va;}int main(){ char argv[2][100]; scanf("%s",argv[1]); int len = std::strlen(argv[1]); std::queue
q; int loc = 0; char ch[100]; memset(ch,0,sizeof(ch)); int chloc = 0; while(loc

转载地址:http://vggci.baihongyu.com/

你可能感兴趣的文章
【opencv学习笔记】010之图像非线性滤波原理与操作(中值滤波、双边滤波)
查看>>
【opencv学习笔记】011之基本形态学操作(膨胀与腐蚀)
查看>>
【CryptoZombies - 1 Solidity 教程】010 msg.sender
查看>>
【opencv学习笔记】012之形态学操作(开闭操作,形态学梯度,顶帽与黑帽)
查看>>
【CryptoZombies - 1 Solidity 教程】011 Require
查看>>
【CryptoZombies - 1 Solidity 教程】012 继承(Inheritance)和 引用 (import)
查看>>
【CryptoZombies - 1 Solidity 教程】013 永久存储变量(storage)和 临时存储变量(memory)
查看>>
【opencv学习笔记】013之形态学操作应用(trackbar应用)
查看>>
【CryptoZombies - 1 Solidity 教程】014 函数可见性
查看>>
【CryptoZombies - 1 Solidity 教程】015 接口interface
查看>>
【opencv学习笔记】014之上采样与降采样
查看>>
【opencv学习笔记】015之基本阈值操作
查看>>
【CryptoZombies - 1 Solidity 教程】016 函数多返回值&奖励实战
查看>>
【CryptoZombies - 2 Solidity 进阶】001 智能合约的不可篡改性与Ownable
查看>>
【积跬步以至千里】App Crashed - WriteMiniDump
查看>>
我努力是因为, 我想通过自己,带给这个世界点什么!
查看>>
数据结构基础笔记、基础知识总结、周周练汇总,通过代码,更快速掌握数据结构和算法知识!
查看>>
赛前必看!!NOIP竞赛及CSP认证初赛赛前辅导详细视频教程!!!
查看>>
完美解决AttributeError: module ‘torchvision.models‘ has no attribute ‘detection‘
查看>>
VMWare报错:无法获得VMCI驱动程序的版本:句柄无效。
查看>>