tyvj/joyoi 1043 表达式计算4
这题怎么这么毒瘤...
一开始我想转后缀表达式来计算,后来发现有负数...弃疗。
递归求解又发现会有多余括号,我觉得不行...
实在是毒瘤啊!
#include <cstdio>
#include <iostream>
#include <string>
typedef long long LL;
std::string s; bool isop(char c) {
if(c == '+') return ;
if(c == '-') return ;
if(c == '*') return ;
if(c == '/') return ;
if(c == '^') return ;
return ;
} LL pow(LL a, LL b) {
LL ans = ;
for(int i = ; i <= b; i++) {
ans *= a;
}
return ans;
} LL solve(int l, int r) {
int f = ;
int pos1 = -, pos2 = -, pos3 = -;
for(int i = l; i <= r; i++) {
if(isop(s[i]) && (!f)) {
if(s[i] == '+' || s[i] == '-') {
pos1 = i;
}
else if(s[i] == '*' || s[i] == '/') {
pos2 = i;
}
else {
pos3 = i;
}
}
else if(s[i] == '(') f++;
else if(s[i] == ')') f--;
} if(f > ) {
LL temp = solve(l + , r);
return temp;
} if(f < ) {
LL temp = solve(l, r - );
return temp;
} if(pos1 > l) {
if(s[pos1] == '+') {
return solve(l, pos1 - ) + solve(pos1 + , r);
}
else {
return solve(l, pos1 - ) - solve(pos1 + , r);
}
}
else if(pos2 != -) {
if(s[pos2] == '*') {
return solve(l, pos2 - ) * solve(pos2 + , r);
}
else {
return solve(l, pos2 - ) / solve(pos2 + , r);
}
}
else if(pos3 != -) {
return pow(solve(l, pos3 - ), solve(pos3 + , r));
}
else if(s[l] == '(' && s[r] == ')'){
return solve(l + , r - );
}
else {
LL ans = ;
int f = ;
while(s[l] == '(') l++;
if(s[l] == '-') {
f = -;
l++;
}
for(int i = l; i <= r; i++) {
if(s[i] == ')') break;
ans = ans * + s[i] - '';
}
return ans * f;
}
} int main() {
std::cin >> s;
printf("%lld", solve(, s.size() - ));
return ;
}
AC代码
tyvj/joyoi 1043 表达式计算4的更多相关文章
- .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...
- C# - 二叉树表达式计算
很早以前就写过双栈的表达式计算. 这次因为想深入学一下二叉树,网上都是些老掉牙的关于二叉树的基本操作. 感觉如果就学那些概念,没意思也不好记忆.于是动手写了一个表达式计算的应用例子. 这样学习印象才深 ...
- C#动态表达式计算
C#动态表达式计算 应该有不少人开发过程中遇到过这样的需求,我们直接看图说话: 如上图所示,其中Entity为实体类,其中包括五个属性,该五个属性的值分别来自于数据库查询结果: 用户通过可视化界面进行 ...
- C#动态表达式计算(续2)
上两篇废话太多,这一次我就不多说了,由于代码比较简单,可以直接从https://github.com/scottshare/DynamicExpress.git地址下载. 以下说明一下使用方法: Dy ...
- 栈应用之 后缀表达式计算 (python 版)
栈应用之 后缀表达式计算 (python 版) 后缀表达式特别适合计算机处理 1. 中缀表达式.前缀表达式.后缀表达式区别 中缀表达式:(3 - 5) * (6 + 17 * 4) / 3 17 ...
- C++实现 逆波兰表达式计算问题
C++实现 逆波兰表达式计算问题 #include <iostream> #include <string> using namespace std; class Stack ...
- 算法笔记_044:表达式计算求值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...
- Fel表达式计算引擎学习
转载原文地址:Fel是轻量级的高效的表达式计算引擎 Fel的问题 Fel的问题 Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是 ...
- 蓝桥杯 算法训练 ALGO-156 表达式计算
算法训练 表达式计算 时间限制:1.0s 内存限制:256.0MB 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输 ...
随机推荐
- 【git】git add 添加错文件 撤销
git add 添加 多余文件 这样的错误是由于, 有的时候 可能 git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件 git add 如果添加了错误的文件的话 撤销操 ...
- python爬虫之requests的基本使用
简介 Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作. 一 ...
- 莫烦sklearn学习自修第七天【交叉验证】
1. 什么是交叉验证 所谓交叉验证指的是将样本分为两组,一组为训练样本,一组为测试样本:对于哪些数据分为训练样本,哪些数据分为测试样本,进行多次拆分,每次将整个样本进行不同的拆分,对这些不同的拆分每个 ...
- 莫烦theano学习自修第七天【回归结果可视化】
1.代码实现 from __future__ import print_function import theano import theano.tensor as T import numpy as ...
- solr部署tomcat 访问HTTP Status 403 – Access to the requested resource has been denied
-----------解决403错误看这里!!-----------打开****\Tomcat 8.5\webapps\solr\WEB-INF里面的web.xml,把下面这段配置注释掉!!!如下所示 ...
- 当考虑到并发问题时候,我们需要将给表插入id的代码挪到service中,目的是将其放到一个事务中,保准事务的一致性
- codeforces545C
Woodcutters CodeForces - 545C Little Susie listens to fairy tales before bed every day. Today's fair ...
- Ontology
本体网络(Ontology) 新一代分布式信任链网 在开始了解项目之前,让我们先看一段“第一财经”频道关于“本体网络”的介绍: 项目介绍 1摘要 类型 提供不同分布式应用场景的开放基础模块,构建跨链 ...
- python 模块之-json
python 模块json import json x="[null,true,false,1]" print(json.loads(x)) #---------------- ...
- 洛谷P4281 紧急集合 / 聚会
LCA 题目要求找离三个点最近的点,我们先看两个点的情况,自然是找LCA,那么三个点的时候是否与LCA有关呢? 显然,离三个点最近的点一定是在这三个点联通的简单路径上. 可以简单证明一下,假设某个点离 ...