当前位置: 首页 > news >正文

HZOJ-266:表达式计算

题目描述

​ 给出一个表达式,其中运算符仅包含 +,-,*,/,^ 要求求出表达式的最终值。

​ 数据可能会出现括号情况,还有可能出现多余括号情况,忽略多余括号,正常计算即可;

​ 数据保证不会出现大于 max long int 的数据;

​ 数据可能会出现负数情况,幂次不可能为负数,除法采用向 0 取整。

​ 注意:−9 和 +9 分别代表负数和正数的 9


输入

​ 共一行,即为表达式。表达式长度不会超过1000.

输出

​ 共一行,既为表达式算出的结果。


样例输入1
(2+2)^(1+1)
样例输出1
16
样例输入2
9/-9
样例输出2
-1

数据规模与约定

​ 时间限制:1 s

​ 内存限制:256 M

​ 100% 的数据保证 数据合法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 1000void weight(char* str, int* wei, int n) {int c = 0;for (int i = 0; i < n; i++) {switch (str[i]) {case '+': wei[i] = c + 1; break;case '-': {if (i == 0 || wei[i - 1] > 0) wei[i] = 0;else wei[i] = c + 1;break;}case '*':case '/': wei[i] = c + 2; break;case '^': wei[i] = c + 3; break;case '(': c += 10, wei[i] = -1; break;case ')': c -= 10, wei[i] = -1; break;default: wei[i] = 0;}}return;
}int calc(char* str, int* wei, int l, int r) {int ind = -1;for (int i = r - 1; i >= l; i--) {if (wei[i] > 0) {if (ind == -1 || wei[i] < wei[ind]) {ind = i;}}}if (ind == -1) {int c = 0, flag = 0;for (int i = l; i < r; i++) {if (wei[i] == 0) {if (str[i] == '-') flag = 1;else {int n = str[i] - '0';c = c * 10 + n;}}}return flag == 1 ? -c : c;}int a = calc(str, wei, l, ind);int b = calc(str, wei, ind + 1, r);switch (str[ind]) {case '+': return a + b;case '-': return a - b;case '*': return a * b;case '/': return a / b;case '^': return pow(a, b);}
}int main() {char str[MAX] = { 0 };gets(str);int len = strlen(str);int* wei = (int*)malloc(sizeof(int) * len);weight(str, wei, len);printf("%d", calc(str, wei, 0, len));free(wei);return 0;
}

http://www.lryc.cn/news/175148.html

相关文章:

  • JavaScript学习小结
  • MySQL学习笔记13
  • 怎么获取外网ip地址
  • 算法 只出现一次的两个数字-(哈希+异或)
  • 外卖霸王餐小程序、H5、公众号版外卖系统源码
  • amlogic 机顶盒关闭DLNA 后,手机还能搜到盒子
  • @Autowire、@Recourse用啥?
  • [linux] 过滤警告⚠️
  • Linux必备操作系统命令大全
  • 【rtp】VideoTimingExtension 扩展的解析和写入
  • 网络安全CTF比赛有哪些事?——《CTF那些事儿》告诉你
  • Winform直接与Wpf交互
  • Uni-app 调用微信地图导航功能【有图】
  • Golang slice 通过growslice调用nextslicecap计算扩容
  • HTTP 协商缓存 Last-Modified,If-Modified-Since
  • 零基础教程:Yolov5模型改进-添加13种注意力机制
  • vue截取地址参数
  • ubuntu 14.04更新GCC版本
  • AndroidUtil - 强大易用的安卓工具类库
  • [多态设计模式]枚举
  • 【QT】QRadioButton的使用(17)
  • 力扣:105. 从前序与中序遍历序列构造二叉树(Python3)
  • 【含java2023面试题】HashMap、HashTable、ConcurrentHashMap
  • AT24C02芯片
  • Python+Django前后端分离
  • win11系统固定到快速访问的文件夹无法调整顺序的问题
  • 短视频矩阵系统,短视频矩阵源码技术开发
  • Flask 数据库 连接池、DBUtils、http 连接池
  • Day 01 python学习笔记
  • CSharp Library develop histroy