题目分析:

只有加减法,所以运算符之间是没有优先级的,只需解决括号带来的优先级问题。

可以有两个方案:递归,栈。

解法一:递归

/**

* 解题简语:

* 递归也可以用来达到栈的功能 -- 后进先出,妙不可言

* 但是平衡括号部分有重复遍历 慢

*/

public static int calculate(String s) {

int res = 0, num = 0, sign = 1, n = s.length();

for (int i = 0; i < n; ++i) {

char c = s.charAt(i);

if (c >= '0') {

num = 10 * num + (c - '0');

} else if (c == '(') {

int j = i, cnt = 0;

for (; i < n; ++i) {

if (s.charAt(i) == '(') ++cnt;

if (s.charAt(i) == ')') --cnt;

if (cnt == 0) break;

}

num = calculate(s.substring(j + 1, i));

}

if (c == '+' || c == '-' || i == n - 1) {

res += sign * num;

num = 0;

sign = (c == '+') ? 1 : -1;

}

}

return res;

}

解法二:栈

/**

* 解题简语:

* 1.从左到右挨个计算 用一个res累计当前结果

* 2.用一个sign来区分加减

* 3.遇到"("将之前结果压栈

* 遇到")"弹栈 -- 压栈时同时压入sign

* PS:1.res = 0和 sign = 1 其实相当于是表达式前方加了个 "0+"

* 2.

* '0' == 48

* '空格' == 32

* '+' == 43

* '-' == 45

* '*' == 42

* '/' == 47

* 且题目只空格数字运算符

* 所以 c >= '0' c就是数字字符

*/

public static int calculate(String s) {

int res = 0, num = 0, sign = 1, n = s.length();

Stack st = new Stack<>();

for (int i = 0; i < n; ++i) {

char c = s.charAt(i);

if (c >= '0') {

num = 10 * num + (c - '0');

} else if (c == '+' || c == '-') {

res += sign * num;

num = 0;

sign = (c == '+') ? 1 : -1;

} else if (c == '(') {

st.push(res);

st.push(sign);

res = 0;

sign = 1;

} else if (c == ')') {

res += sign * num;

num = 0;

res *= st.pop();

res += st.pop();

}

}

res += sign * num;

return res;

}

android计算器括号,计算器(一)——加减和括号相关推荐

  1. python实现一个简单的加法计算器_Python简易项目 加减计算器的实现

    Python Calculator 1.0 支持功能:add.minus 输入表达式不含括号,允许不加'=' 非常简单的一个小计算器,还缺少很多功能,目的是为了练练手. 日后会对其进行更新. 源码 # ...

  2. Android仿饿了么加减控件,Flutter + Native混合栈仿饿了么APP

    前言 一个基于Flutter + Native混合开发的APP,请求数据均人为制造. 目前仅上传Android版本,iOS暂未上传 APK下载 Github地址 效果图: 实现功能: 首页 使用百度定 ...

  3. 高精度加减乘法小程序

    复习高精度玩,写了个非常直观的加减乘程序. 1 Uses Math; 2 Var 3 a,b:AnsiSTring; 4 DC,la,lb:longint; 5 c:Array[-2555555..2 ...

  4. 三年级乘法计算机应用题目,三年级数学加减计算题大全

    WORD文档电子版排版好A4纸设计直接打印.全部有答案. 可根据您的学习需要定制各种题型小学数学专项练习题. 科学出题.完美排版,字体清晰.字号适当,一键打印,解放家长,解放老师,让您再也不为每天自己 ...

  5. c语言日期加减天数,日期计算器

    一  完成的功能 注意:此日历只能用于计算1982年10月15日以及以后的日期 1.日期+/-天数=返回日期(处理:1.如果+/-一个负的天数的情况 2.如果加之后,或减之后的日期非法) 2.两个日期 ...

  6. linux shell 计算器 除0,用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1....

    用shell写一个简易计算器,可以实现加.减.乘.除运算,假如脚本名字为1.sh,执行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo &quo ...

  7. linux脚本计算器加减乘除,用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1....

    用shell写一个简易计算器,可以实现加.减.乘.除运算,假如脚本名字为1.sh,执行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo &quo ...

  8. 仿照Windows的计算器,编写一个简易的计算器程序,实现加、减、乘、除等运算。

    仿照Windows的计算器,编写一个简易的计算器程序,实现加.减.乘.除等运算. 偷懒了很多,将就着用吧: import java.awt.FlowLayout; import java.awt.ev ...

  9. Python列表实现矩阵的创建、输入输出、转化转置、加减乘运算并设计一个矩阵计算器GUI界面

    背景:在解决一些编程问题中如棋盘的初始化,链表,队列的构建:数据处理中如用SAS软件输入数据等涉及到矩阵的概念,而用编程语言实现矩阵的方式有C中的数组,python中的列表等.现在给你一个数据如下,或 ...

  10. 时间加减计算器_FRM计算器使用流程你知道吗?

    金融计算器对于FRM考试有多重要,从进考场必备用品就可以看出来. 准考证,计算器是必须带的,忘了准考证,你就只能明年再战,忘了计算器,哪怕你是学神,想要通过考试大概率也是要烧香的. FRM考试与其他类 ...

最新文章

  1. Oracle存储过程编译卡死的解决方法
  2. pthread 立即停止线程_线程取消(pthread_cancel)
  3. CCF之地铁修建(100分)
  4. 【QGIS入门实战精品教程】4.7:QGIS如何将矢量数据转为GeoJSON格式?
  5. centos 6.9 安装 Mysql 5.7.20 安装
  6. Java aio(异步网络IO)初探
  7. python---之np.cumprod np.cumsum 累乘 累加
  8. cdn 内容分发 资源放在更接近用户的网络边缘
  9. activeMQ支持的四种协议简介及性能比较
  10. linux命令行格式简介
  11. 【已解决】ipa降级教学 苹果旧版APP下载
  12. Excel判断身份证号码数据的第17或15位数字的奇偶性决定男女性别
  13. 女儿当自强,男儿更当自强
  14. 桓公与轮扁:轮扁斫轮
  15. 电脑卡怎么办?4招帮你解决电脑卡顿的烦恼!
  16. VSTS Overview
  17. Easyui combobox设置值和文本的几种方式和问题
  18. 我所收藏的重点大学BBS资源
  19. 与域名空间推销员的QQ对话
  20. Vite开启https — 离线和在线生成签名证书

热门文章

  1. java安装后在哪里打开_java安装后怎么打开教程
  2. Opencv图像二值化操作
  3. 解压版tomcat7配置
  4. 乌龟GIT的合并代码
  5. 大数据学习入门看什么书?大数据新手怎么入门?
  6. 视频截帧 php,php截取视频指定帧为图片_PHP
  7. android国际化多语言对照
  8. RBF神经网络和拟合实例
  9. 计算机应用基础数制试题及答案,计算机应用基础试题及答案1
  10. 树莓派 armv几_如何在具有armv6处理器的树莓派板上安装和使用Java 11和JavaFX 11