1019_简单计算器

// 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;
//}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值