计算(calc.cpp) 这题我搞了2晚上qwq
计算(calc.cpp)
#include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring> using namespace std; int number[],i=, p=;
char symbol[],s[],t[]; void push() { //算符入栈运算
symbol[++p]=s[i];
} void pop() { //运算符栈顶元素出栈,并取出操作数栈元素完成相应的运算
switch (symbol[p--]) { //运算完成之后扔掉运算符,也标志着需要运算的数已经运算完成
case '+': {
number[p]+=number[p + ];
break;
}
case '-': {
number[p]-=number[p + ];
break;
}
case '*': {
number[p]*=number[p + ];
break;
}
case '/': {
number[p]/=number[p + ];
break;
}
case '^': {
number[p]=pow(number[p],number[p + ]);
}
}
} bool can() { //判断运算符的优先级别,建立标志函数,能否进行运算
if ((s[i]=='+'||s[i]=='-')&&symbol[p]!='(')//如果不是‘(’,则需要出栈,因为+与-的运算优先级别较低,仅仅比‘(’大
return ;
if ((s[i]=='*'||s[i]=='/')&&(symbol[p]=='*'||symbol[p]=='/'))
//若遇到乘除且运算符数组中对应的恰好是乘除,则需要出栈
return ;
return ;
} bool judge(char s[]) {
int top=,i=;
while (s[i]!='@') {
if (s[i]=='(')top++;
if (s[i]==')') {
if (top>) top--;
else return ;
}
i++;
}
if (top!=) return ; //检测栈是否为空。不空则说明有未匹配的括号
else return ;
} int main() {
gets(s);
if(judge(s)==) {
cout<<"NO";
return ;
} s[strlen(s)]=')';
symbol[p]='(';
while (i<strlen(s)) {
while (s[i]=='(') { //左括号处理,压入左括号,有了左括号才能进行与右括号的匹配 while (symbol[p]!=‘(‘)
push();
i++;
}
int x=;
while (s[i]>=''&&s[i]<='') //取数入操作数栈
x=x*+s[i++]-'';
number[p]=x;
do {
if (s[i]==')') { //当右括号后面还有右括号时处理
while (symbol[p]!=')')
pop();//当括号内还有算式没有算完时进行运算
number[--p]=number[p + ];//当运算完成以后左括号已经没有意义,所以将指针p移向前一个运算符,并复制所得的结果
} else {
//根据标志函数值作运算符入栈或出栈运算处理
while (can())
pop();// 当可以进行运算时运算,然后压入一个运算符
push();
}
i++;
} while (i<strlen(s)&&s[i-]==')');//当检测到右括号时,可以运算括号内的内容
}
printf("Result=%d", number[]);//这个是建立在最后有‘@’的情况下。因为所有的运算全部是建立在括号之内的,所以随着运算符的减少(运算符减少同时标志着需要操作的数减少)和最后的p--,结果一定保存在number[0]内
//printf("Result=%d",number[1]);
//如果需要不输入‘@’的运算式,则只需把从number【0】输出改为number【1】就好啦~
return ;
}
计算(calc.cpp) 这题我搞了2晚上qwq的更多相关文章
- 计算(calc.cpp)
计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...
- 计算(calc)
计算(calc) [题目描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有"(",")",& ...
- 原来css也可以计算-calc()使用
在浏览其他人的源代码时,看到了一个陌生的属性:width:calc(100% - 10px -10px); 出于好奇心,百度了一下,看到了以下这篇文章,http://www.w3cplus.com/c ...
- css盒模型宽高混合计算calc
例如: .element{ width:calc(expression); } 兼容性:在IE9+.FF4.0+.Chrome19+.Safari6+都得到了较好支持,但是在移动端的支持不是很好. 其 ...
- 洛谷P1028 数的计算 题解 动态规划入门题
题目链接:https://www.luogu.com.cn/problem/P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ): 先输入一个自然数 \(n(n \ ...
- calc 多项式计算 (STL版和非STL版) -SilverN
计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...
- 解题:HNOI 2008 玩具装箱
题面 搞了一晚上斜率优化,大概懂了一点,写写 原来常用的优化dp方法:做前缀和,预处理,数据结构维护 现在有转移方程长这样的一类dp:$dp[i]=min(dp[i],k[i]*x[j]+y[j]+c ...
- 1010: [HNOI2008]玩具装箱toy [dp][斜率优化]
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- 5-6 学生CPP成绩计算
给出下面的人员基类框架: class Person { protected: string name; int age; public: Person(); Person (string p_name ...
随机推荐
- 【Python基础】12_Python中的容器类型公共方法
1.Python中的内置函数 注:比较两个值,使用 <. >. == 2.切片 注:字典是一个无序集合,不能切片 3.运算符 字典中的in .not in 对字段操作时,只能判断字典的k ...
- Go语言操作NoSql
NSQ平台 NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ. NSQ NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异. N ...
- 【思维】Kenken Race
题目描述 There are N squares arranged in a row, numbered 1,2,...,N from left to right. You are given a s ...
- k8s之dashboard认证、资源需求、资源限制及HeapSter
1.部署dashboard kubernetes-dashboard运行时需要有sa账号提供权限 Dashboard官方地址:https://github.com/kubernetes/dashboa ...
- C# Base64 操作类
using System; using System.Text; namespace VWFC.IT.CUP.BLL.Util { /// <summary> /// Base64 too ...
- [NOIP10.6模拟赛]1.merchant题解--思维+二分
题目链接: while(1)gugu(while(1)) 闲扯 考场上怕T2正解写挂其他两题没管只打了暴力,晚上发现这题思维挺妙的 同时想吐槽出题人似乎热衷卡常...我的巨大常数现在显露无疑QAQ 分 ...
- Django rest-framework框架-解析器
解析器: 开始: django: request.POST/ request.body 满足一下两个要求POST中才有值 1. 如果请求头中的 Content-Type: application/x- ...
- java读取串口-mfz-rxtx-2.2-20081207-win-x86
1.下载jar包 RXTXcomm.jar 2.实现代码 package main; import java.awt.*; import java.awt.event.*; import java.i ...
- Js-带进度条的轮播图
带进度条的轮播图--原生JS实现 实现了图片自动轮播,左右按钮实现图片左右转换,下方原点或者缩小图点击选择其中的某一张图片,然后有红条实现图片的进度. <div class="cont ...
- ESP8266开发环境、编译、烧录
官方地址 中:http://www.espressif.com/zh-hans/support/download/overview?keys=&field_type_tid[]=14 英:ht ...