// 1019_简单计算器.cpp : 定义控制台应用程序的入口点。
//1019:简单计算器
//时间限制:1 秒内存限制:32 兆特殊判题:否提交:8585解决:3134
//题目描述:
// 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
//输入:
// 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
//输出:
// 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
//样例输入:
//1 + 2
//4 + 2 * 5 - 7 / 11
//0
//样例输出:
//3.00
//13.36
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#define MAX 1001
double stack[MAX];
int tail;
int main(){
int a;
while(scanf("%d ",&a)&&a!=0){
tail=0;
stack[++tail]=1.0*a;//tail始终指向末尾数字位置
//1.入栈所有数据(如果遇到*/号,只更新栈尾)
char ch1,ch2;
while(scanf("%c %d%c",&ch1,&a,&ch2)!=EOF){
if(ch1=='+'){
stack[++tail]=1.0*a;//push
}else if(ch1=='-'){
stack[++tail]=-1.0*a;//关键是把减法变为加法
}else if(ch1=='*'){
stack[tail]=stack[tail]*a;//update tail
}else if(ch1=='/'){
stack[tail]=stack[tail]/(double)a;//updata tail
}
if(ch2!=' ')break;
}
//2.把栈里头的东西全部加起来,求和
double result=0;
for(int i=1;i<=tail;i++)result+=stack[i];
printf("%.2lf\n",result);
}
return 0;
}
//#include "stdio.h"
//#include "string.h"
//#include "stdlib.h"
//
//#define is_op(x) !strcmp("+",x)|!strcmp("-",x)|!strcmp("*",x)|!strcmp("/",x)
//
//typedef struct stack{
// double digit[200];
// char op[200];
// int top_digit;
// int top_op;
//}stack;
//
//double calculate(double a,char c,double b)
//{
// if(c == '+')
// return a+b;
// else if(c == '-')
// return a-b;
// else if(c == '*')
// return a*b;
// else if(c == '/')
// return a/b;
//}
//
//int main()
//{
// char c;
// char line[202];
// while(gets(line))
// {
// int len = strlen(line);
// char *token = " ";
// char *result = strtok(line,token);
// stack s;
// s.digit[0] = -1.0;
// s.op[0] = '#';
// s.top_digit = 0;
// s.top_op = 0;
// while(result)
// {
// //if(!strcmp(result,"+"))
// if(is_op(result))
// {
// //printf("%c",result[0]);
// //break;
// s.op[++s.top_op] = result[0];
// //printf("%c",s.op[s.top_op]);
// }
// else
// {
// double num = atof(result);
// char temp = s.op[s.top_op];
// if(temp == '+' || temp == '-' || temp/ == '#')
// {
// //s.top_digit++;
// s.digit[++s.top_digit] = (double)num;
//
// }
// else
// {
// double d = s.digit[s.top_digit--];
// double result = calculate(d,temp,num);
// s.digit[++s.top_digit] = result;
// }
// //printf("%d\n",num);
//
// }
// //else if(!strcmp(*result,""))
// }
// //printf("%c ",c);
// }
// /*char a[100];
// gets(a);
// printf("%c",a[1]);
// if(a[1] == '\n')
// printf("ddddddd");
// else if(a[1] == '\0')
// printf("zzzzzz");
// printf("%s",a);*/
// return 0;
//}
1019_简单计算器
最新推荐文章于 2021-05-31 12:14:58 发布