解题思路:
注意事项: 要用double型不然幂运算不了!!!!
参考代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
struct s{
int num[1000];
int top;
};
void clear(struct s *stack){ //初始化栈
stack->top=-1;
}
double pop(struct s *stack){ //数字出栈
double t;
t=stack->num[stack->top];
stack->top--;
return t;
}
void push (struct s *stack,double n){ //数字入栈
stack->top++;
stack->num[stack->top]=n;
}
double compute(char c,double a,double b){ //进行符号计算
double s=0;
switch (c){
case '+':s=a+b;break;
case '-':s=a-b;break;
case '*':s=a*b;break;
case '/':s=a/b;break;
case '^':s=pow(a,b);break;
}
return s;
}
int main (){
struct s *stack;
stack=(struct s *)malloc(sizeof(struct s));
char a[1000];
gets(a);
double s=0;
clear(stack);
for (int i=0;a[i]!='\0';i++){
if (a[i]=='@'){
break;
}else if (a[i]>='0'&&a[i]<='9'){ //数字字符转换成数字
s=s*10+(a[i]-'0');
continue;
}else if (a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='^'){
double t;
t=compute(a[i],pop(stack),pop(stack)); //数字栈中弹出两个进行计算,并入栈
push(stack,t);
}else{ //就是遇到空格了,将转换好的数字s,压入数字栈,将s初始化
push(stack,s);
s=0;
}
}
printf ("%.0lf",pop(stack)); //最终唯一的结果,就在数字栈中,弹出输出即可!!!
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复