C语言的题目
Problem Description
有些计算器使用逆波兰表示法来书写数学表达式。在这一表示法中,运算符放置在操作数的后面而不是放置在操作数中间。例如:在逆波兰表示法中1+2将表示为1 2 +,而1+2 * 3将表示为123*+。
逆波兰表达式可以很方便地用栈求值。算法从左向右读取运算符和操作数,并执行下列步骤:
(1)当遇到操作数时,将其压入栈中。
(2)当遇到运算符时,从栈中弹出它的操作数,执行运算并把结果压入栈中。
编写程序对逆波兰表达式求值。操作数都是个位的整数,运算符为+、-、、/和=。
Input Description
在一行中输入逆波兰表达式。保证操作数都是个位的整数,运算符为+、-、、/和=。
Output Description
输出所求的值。
Sample Input
123*+=
Sample Output
7
下面是我写的答案
#include
#include
#include
#include
int main()
{
char A[100];
int a,b=0,c=0;
float s;
int B[100]={};
gets(A);
while(b<100)
{
a=toascii(A[b]);
if(48<=a&&a<=57) B[b]=a-48;
else b=b+100;
b++;
}
b=b-102;
c=b+1;
s=B[b];
while(b>=0)
{
a=toascii(A[c]);
if(a==42) s=B[b-1]*s;
if(a==43) s=B[b-1]+s;
if(a==45) s=B[b-1]-s;
if(a==47) s=B[b-1]/s;
if(a==61) b=b-100;
b--;
c++;
}
c=floor(s);
if(c==s) printf("%.0f",s);
if(c!=s) printf("%f",s);
return 0;
}