leetcode[227]:Basic Calculator II

来源:互联网 发布:阿里云文件上传demo 编辑:程序博客网 时间:2024/05/18 03:56

Basic Calculator II

Implement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.

You may assume that the given expression is always valid.

Some examples:

"3+2*2" = 7" 3/2 " = 1" 3+5 / 2 " = 5

Note: Do not use the eval built-in library function.

int calculate(char* s) {    int stack[100000]={0};    int stack2[100000]={0};    int i,l1,l2,op;    int tmp, res;    res=l1=l2=op=0;    for(i=0;s[i];)    {        if(s[i]==' ') {i++;continue;}        if(s[i]=='+') {stack2[l2++]=1;i++;continue;}        if(s[i]=='-') {stack2[l2++]=2;i++;continue;}        if(s[i]=='*')        {            op=1;            i++;            continue;        }        if(s[i]=='/')        {            op=2;            i++;            continue;        }        tmp=0;        while(s[i]>='0' && s[i]<='9')        {            tmp=tmp*10+s[i]-'0';            i++;        }        if(op==1)        {            tmp*=stack[--l1];            op=0;        }        if(op==2)        {            tmp=stack[--l1]/tmp;            op=0;        }        stack[l1++]=tmp;    }    res=stack[0];    for(i=1;i<l1;i++)    {        if(stack2[i-1]==1) res+=stack[i];        else res-=stack[i];    }    return res;}

先计算乘除,将加减全部压栈,最后遍历一遍栈计算加减即可。但耗时比较大!待改进。

0 0
原创粉丝点击