android计算器括号,计算器(一)——加减和括号
题目分析:
只有加减法,所以运算符之间是没有优先级的,只需解决括号带来的优先级问题。
可以有两个方案:递归,栈。
解法一:递归
/**
* 解题简语:
* 递归也可以用来达到栈的功能 -- 后进先出,妙不可言
* 但是平衡括号部分有重复遍历 慢
*/
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计算器括号,计算器(一)——加减和括号相关推荐
- python实现一个简单的加法计算器_Python简易项目 加减计算器的实现
Python Calculator 1.0 支持功能:add.minus 输入表达式不含括号,允许不加'=' 非常简单的一个小计算器,还缺少很多功能,目的是为了练练手. 日后会对其进行更新. 源码 # ...
- Android仿饿了么加减控件,Flutter + Native混合栈仿饿了么APP
前言 一个基于Flutter + Native混合开发的APP,请求数据均人为制造. 目前仅上传Android版本,iOS暂未上传 APK下载 Github地址 效果图: 实现功能: 首页 使用百度定 ...
- 高精度加减乘法小程序
复习高精度玩,写了个非常直观的加减乘程序. 1 Uses Math; 2 Var 3 a,b:AnsiSTring; 4 DC,la,lb:longint; 5 c:Array[-2555555..2 ...
- 三年级乘法计算机应用题目,三年级数学加减计算题大全
WORD文档电子版排版好A4纸设计直接打印.全部有答案. 可根据您的学习需要定制各种题型小学数学专项练习题. 科学出题.完美排版,字体清晰.字号适当,一键打印,解放家长,解放老师,让您再也不为每天自己 ...
- c语言日期加减天数,日期计算器
一 完成的功能 注意:此日历只能用于计算1982年10月15日以及以后的日期 1.日期+/-天数=返回日期(处理:1.如果+/-一个负的天数的情况 2.如果加之后,或减之后的日期非法) 2.两个日期 ...
- linux shell 计算器 除0,用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1....
用shell写一个简易计算器,可以实现加.减.乘.除运算,假如脚本名字为1.sh,执行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo &quo ...
- linux脚本计算器加减乘除,用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1....
用shell写一个简易计算器,可以实现加.减.乘.除运算,假如脚本名字为1.sh,执行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo &quo ...
- 仿照Windows的计算器,编写一个简易的计算器程序,实现加、减、乘、除等运算。
仿照Windows的计算器,编写一个简易的计算器程序,实现加.减.乘.除等运算. 偷懒了很多,将就着用吧: import java.awt.FlowLayout; import java.awt.ev ...
- Python列表实现矩阵的创建、输入输出、转化转置、加减乘运算并设计一个矩阵计算器GUI界面
背景:在解决一些编程问题中如棋盘的初始化,链表,队列的构建:数据处理中如用SAS软件输入数据等涉及到矩阵的概念,而用编程语言实现矩阵的方式有C中的数组,python中的列表等.现在给你一个数据如下,或 ...
- 时间加减计算器_FRM计算器使用流程你知道吗?
金融计算器对于FRM考试有多重要,从进考场必备用品就可以看出来. 准考证,计算器是必须带的,忘了准考证,你就只能明年再战,忘了计算器,哪怕你是学神,想要通过考试大概率也是要烧香的. FRM考试与其他类 ...
最新文章
- Oracle存储过程编译卡死的解决方法
- pthread 立即停止线程_线程取消(pthread_cancel)
- CCF之地铁修建(100分)
- 【QGIS入门实战精品教程】4.7:QGIS如何将矢量数据转为GeoJSON格式?
- centos 6.9 安装 Mysql 5.7.20 安装
- Java aio(异步网络IO)初探
- python---之np.cumprod np.cumsum 累乘 累加
- cdn 内容分发 资源放在更接近用户的网络边缘
- activeMQ支持的四种协议简介及性能比较
- linux命令行格式简介
- 【已解决】ipa降级教学 苹果旧版APP下载
- Excel判断身份证号码数据的第17或15位数字的奇偶性决定男女性别
- 女儿当自强,男儿更当自强
- 桓公与轮扁:轮扁斫轮
- 电脑卡怎么办?4招帮你解决电脑卡顿的烦恼!
- VSTS Overview
- Easyui combobox设置值和文本的几种方式和问题
- 我所收藏的重点大学BBS资源
- 与域名空间推销员的QQ对话
- Vite开启https — 离线和在线生成签名证书