合肥网站建设王道下拉強嘉定区整站seo十大排名
这道题很明显和之前做的逆波兰表达式(见leecodeLCR036逆波兰表达式)就是一个模子里刻出来的题,都是利用栈进行表达式的计算
BUT这道题和我们自己之前写的不一样的地方在于对输入的特殊处理——尤其是因为在这里我们需要自己对输入进行处理
原本我想一次性将所有(不管是运算符号还是数字字符)以字符串的形式先进行读取,读取完毕之后将数字字符串转换为整型数字但是由于.还有运算符之间并没有进行分隔开来,注定我们只能使用getchar“逐字逐句”地进行读取
进行读取之后我们先要进行判断——是数字还是运算符,数字的话就将他加投入到数字之中直至遇到.为止——说明当前数字读取完毕——>放入数字的栈之中进行暂时的存储
因为使用的是getchar进行单个字符的读取,所以我们在读取的同时可以将栈中数据拿出进行计算,不需要再编写函数
#include<stdio.h>
#include<stdlib.h>
int stack[1000];
int top=0;
int main(){
char buf;
int num=0;
while((buf=getchar())!='@'){//首先要进行读取,读取时字符串当中的点是关键if(buf>='0'&&buf<='9'){//注意读到0的情况,不要把0给忘了num=num*10+(buf-'0');}else if(buf=='.'){// printf("%d\n",num);stack[top++]=num;num=0;}else if(buf=='+'){int num2=stack[--top];int num1=stack[--top];stack[top++]=num1+num2;// printf("%d\n",stack[top-1]);}else if(buf=='-'){int num2=stack[--top];int num1=stack[--top];stack[top++]=num1-num2;// printf("%d\n",stack[top-1]);}else if(buf=='*'){int num2=stack[--top];int num1=stack[--top];stack[top++]=num1*num2;// printf("%d\n",stack[top-1]);}else if(buf=='/'){int num2=stack[--top];int num1=stack[--top];stack[top++]=(num1/num2);// printf("%d\n",stack[top-1]);}}printf("%d",stack[--top]);}