首页 > 学院 > 开发设计 > 正文

1019_简单计算器

2019-11-10 19:36:33
字体:
来源:转载
供稿:网友
// 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;//}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表