地址:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1511
1.进栈出栈操作不要闹混。
2.要用float类型,虽然最后结果一定为整数 但是中间数可能不是 比如3/2+3/2 不用float就是2 而用了float就是3.
科学计算器 Submit: 3087 Accepted:617 Time Limit: 1000MS Memory Limit: 65536K
Description
给你一个不带括号的表达式,这个表达式只包含加、减、乘、除,请求出这个表达式的最后结果,最后结果一定是整数;
Input
一个数学表达式,只包括数字,数字保证是非负整数,以及五种运算符"+","-","*","/","=";数字和运算符之间有一个或者多个空格,运算符的总数不会超过100,最后以"="号结尾,表示表达式结束。注意:使用C的同学,在读取字符串的时候请使用scanf("%s",..);以免不必要的错误。
Output
整数;
Sample Input
1 + 2 + 3 * 6 / 9 =
Sample Output
5
Source
#include<iostream>
using namespace std;
char a[1000];
char op[101];
float num[101];
int main()
{
int i=0,j,sum=0,optop=0,numtop=0;
float tempo,tempt,numtemp; // 注意用浮点型
char c,temp;
while((c=getchar())!='/n')
{
if(c>='0'&&c<='9')
{
numtemp=numtemp*10+c-'0';
}
if(c=='+'||c=='-')
{
if(op[optop-1]!=NULL)
{
tempo=num[--numtop];
tempt=num[--numtop];
temp=op[--optop];
if(temp=='*')
{
tempo=tempo*tempt;
num[numtop++]=tempo;
}
if(temp=='/')
{
tempo=tempt/tempo;
num[numtop++]=tempo;
}
if(temp=='+')
{
tempo=tempo+tempt;
num[numtop++]=tempo;
}
if(temp=='-')
{
tempo=tempt-tempo;
num[numtop++]=tempo;
}
}
op[optop]=c;
optop++;
} //if
if(c=='*'||c=='/')
{
if(op[optop-1]=='*'||op[optop-1]=='/')
{
tempo=num[--numtop];
tempt=num[--numtop];
temp=op[--optop];
if(temp=='*')
{
tempo=tempo*tempt;
num[numtop++]=tempo;
}
if(temp=='/')
{
tempo=tempt/tempo;
num[numtop++]=tempo;
}
}//if
op[optop]=c;
optop++;
}
if(int(c)==32&&numtemp!=0)
{
num[numtop]=numtemp;
numtop++;
numtemp=0;
}
if(c=='=')
{
while(optop>0)
{
tempo=num[--numtop];
tempt=num[--numtop];
temp=op[--optop];
if(temp=='*')
{
tempo=tempo*tempt;
num[numtop++]=tempo;
}
if(temp=='/')
{
tempo=tempt/tempo;
num[numtop++]=tempo;
}
if(temp=='+')
{
tempo=tempo+tempt;
num[numtop++]=tempo;
}
if(temp=='-')
{
tempo=tempt-tempo;
num[numtop++]=tempo;
}
} //while
printf("%.0f/n",num[--numtop]);
}//if
}
system("pause");
}