227. 基本计算器 II--栈用法
-- 用法 基本 II 计算器
2023-09-14 09:06:52 时间
227. 基本计算器 II
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = “3+2*2”
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
示例 3:
输入:s = " 3+5 / 2 "
输出:5
这题博主做的稍微复杂了一些,原理就是,先把乘除解决了,之后我们再去按顺序解决加减的数据:
解题代码如下:
int num_tr(char *s,int *index){
long long num=0;
long long i=*index;
while(s[i]==' '){
i++;
}
for( ;s[i]!='\0';i++){
if(s[i]>='0'&&s[i]<='9'){
num=num*10+s[i]-'0';
}
else{
break;
}
}
*index=i;
return num;
}
int calculate(char * s){
int len=strlen(s);
long long stack_num[len];
int num_top=0;
char stack_s[len];
int s_top=0;
int *index=(int *)malloc(sizeof(int));
for(int i=0;s[i]!='\0';){
if(s[i]==' '){
i++;
continue;
}
if(s[i]>='0'&&s[i]<='9'){
*index=i;
int num=num_tr(s,index);
i=*index;
stack_num[num_top++]=num;
// printf("| %d ",num);
}
else{
if(s[i]=='*'){
long long prenum=stack_num[--num_top];
*index=i+1;
long long backnum=num_tr(s,index);
i=*index;
stack_num[num_top++]=prenum*backnum;
}
else if(s[i]=='/'){
long long prenum=stack_num[--num_top];
*index=i+1;
// printf("%s --",s+i);
long long backnum=num_tr(s,index);
// printf("%d %c --",backnum,s[i+1]);
i=*index;
stack_num[num_top++]=prenum/backnum;
}
else{
stack_s[s_top++]=s[i];
i++;
}
}
}
int p=0;
int re=stack_num[0];
for(int i=0;i<s_top;i++){
char sign=stack_s[i];
if(sign=='+'){
long long b=stack_num[++p];
re=re+b;
}
if(sign=='-'){
long long a=stack_num[++p];
re=re-a;
}
}
return re;
}
相关文章
- 数据映射--平衡二叉有序树
- shell脚本--数值比较
- C基础--关于typedef的用法总结
- ACM--string常见用法
- ACM--string常见用法
- java struts2入门学习--OGNL语言基本用法
- C#--SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及联系
- Nexus--Ubuntu apt仓库搭建
- Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
- 线程安全(2)--多线程逸出分析和正确处理
- Android JNI语法之--C++--list、set、map用法
- c++ vector 初始化_C++--vector()的用法
- guava学习--cache
- seek和tell的用法--获取文件内容大小(字节)
- 21.第六章 Shell脚本编程基础入门-- shell 脚本语言的基本用法(四)
- y158.第九章 GitOps从入门到精通 -- Pipeline高级用法和实战案例Source-2-Image(七)
- Linux编译 --prefix和DESTDIR用法(十)
- 【计算机三级数据库技术】第8章 数据库后台编程技术--附思维导图
- HCIE-Cloud Computing LAB备考第二步:逐题攻破--第四题:升级FA/VRM--题目分析
- 读书笔记:《亿级流量网站架构核心技术 -- 跟开涛学搭建高可用高并发系统》
- git commit --amend两种用法
- 【数字IC/FPGA】仲裁器进阶--Round Robin Arbiter