1019_简单计算器

来源:互联网 发布:c语言官方网站 编辑:程序博客网 时间:2024/04/29 18:53
// 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 1001double 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;//}
0 0