题解 | #四则运算#
四则运算
http://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
抄的大佬代码,自己整理了一下思路。
原理同上一道《表达式求值》,详解看我上一篇博文。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int i=0,j=0;
int trans(char *s)//取加数
{
int len;
int stack[100];
int top=-1;
char flag='+';
int sum=0;
len=strlen(s);
while(i<=len)
{
int num=0;
if(*(s+i)=='-')//第一位是负数的情况
{
flag='-';
i++;
}
if(*(s+i) == '('||*(s+i) == '['||*(s+i) == '{')
{
i++;
num=trans(s);
}
while((*(s+i)-'0'>=0)&&(*(s+i)-'0'<=9))
{
num=num*10+(*(s+i)-'0');//将字符型转换为整型,算超过一位的数字需要多次
i++;
}
switch(flag)
{
case'+':
{
stack[++top]=num;
break;
}
case'-':
{
stack[++top]=(-1)*num;
break;
}
case'*':
{
stack[top]*=num;
break;
}
case'/':
{
stack[top]/=num;
break;
}
}
flag=*(s+i);//取下一个符号
if (*(s+i) == ')'||*(s+i) == ']'||*(s+i) == '}')
{
i++;
break;
}
i++;
}
for(int j=0;j<=top;j++)
{
sum=sum+stack[j];
}
return sum;
}
int main()
{
int award;
char *s;
s=(int*)malloc(sizeof(int));
scanf("%s\n",s);
award=trans(s);
printf("%d",award);
}