简单四则运算

问题描述:

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注:

3.1、表达式只含 +, -, *, / 四则运算符,不含括号

3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3.3、要考虑加减乘除按通常四则运算规定的计算优先级

3.4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

3.5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

要求实现函数:

int calculate(int len, char *expStr)

【输入】 int len: 字符串长度;

char *expStr: 表达式字符串;

【输出】 无

【返回】 计算结果

示例:

1)输入:char *expStr = “1+4*5-8/3”

函数返回:19

2)输入:char *expStr = “8/3*3”

函数返回:6

  1 #include<stdio.h>
  2 template <typename T>
  3 class MyStack{
  4     int top;
  5     int sum;
  6     T a[100];
  7 public:
  8     MyStack(){top = -1; sum = 0;}
  9     T getTop(){return a[top];}
 10     int getSize(){return sum;}
 11     bool pop()
 12     {if(top >=0)
 13         {
 14             top--;
 15             sum--;
 16             return true;
 17         }
 18         else return false;
 19     }
 20     bool push(T value)
 21     {
 22         if (top >= 99)
 23             return false;
 24         else
 25         {
 26             a[++top] = value;
 27             sum++;
 28         }
 29     }
 30
 31 };
 32 int switchCal(char c)
 33 {
 34     switch(c)
 35     {
 36     case ‘+‘:
 37     case ‘-‘:
 38         return 1;
 39     case ‘*‘:
 40     case ‘/‘:
 41         return 2;
 42     default:
 43         return 0;
 44     }
 45 }
 46 int calc(char c,int i,int j)
 47 {
 48     switch(c)
 49     {
 50     case ‘+‘: return i+j;
 51     case ‘-‘: return i-j;
 52     case ‘*‘: return i*j;
 53     case ‘/‘: return i/j;
 54     default:
 55         return 0;
 56     }
 57 }
 58
 59 int calculate(int len, char *expStr)
 60 {
 61     char *p = expStr;
 62     int i,j;
 63     MyStack<int> num;
 64     MyStack<char> cal;
 65     while (*p != ‘\0‘)
 66     {
 67         if (cal.getSize() > 0 && switchCal(cal.getTop()) == 2 )
 68         {
 69             i = num.getTop();
 70             printf("\n");
 71             printf("pop: %d ",i);
 72             num.pop();
 73             j = *p - ‘0‘;
 74             p++;
 75             printf("jump: %d ",j);
 76             printf(" calculate %c ",cal.getTop());
 77             i = calc(cal.getTop(),i,j);
 78             cal.pop();
 79             num.push(i);
 80             printf("push: %d ",i);
 81         }
 82         if (*p == ‘\0‘)
 83             break;
 84         if (*p >= ‘0‘ && *p <= ‘9‘)
 85             {
 86                 i = *p - ‘0‘;
 87                 printf("push: %d ",i);
 88                 num.push(i);
 89             }
 90         else
 91         {
 92             cal.push(*p);
 93             printf("push: %c ",*p);
 94         }
 95         p++;
 96     }
 97     while (cal.getSize())
 98     {
 99         i = num.getTop();
100         num.pop();
101         j = num.getTop();
102         num.pop();
103         i = calc(cal.getTop(),j,i);
104         cal.pop();
105         num.push(i);
106     }
107     printf("\n");
108     return num.getTop();
109 }
110 int main()
111 {
112     int len;
113     char str[100];
114     scanf("%d%s",&len,str);
115     printf("%d\n",calculate(len,str));
116 }

这题还有点麻烦,忘记怎么把中缀式改为前缀式了~呀。。。。

只能用中缀式计算了,还好输入那么完美

时间: 2024-11-08 20:08:27

简单四则运算的相关文章

2nd 简单四则运算更新

简单四则运算更新 功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误.其他功能有待进一步实现. 头文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <math.h> 栈的结构体 typedef struct stack { double * e; in

华为机考--简单四则运算

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 1.表达式只含 +, -, *, / 四则运算符,不含括号 2.表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.要考虑加减乘除按通常四则运算规定的计算优先级 4.除法用整数除法,即仅保留除法运算结果的整数部分.比如8/3=2.输入表达式保证无0作为除数情况发生 5.输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 要求实

24点游戏计算器 (简单四则运算)(c++)

24点游戏计算器 (简单四则运算)(c++):https://github.com/liuxinig/cpp_1001/blob/master/24dian_siZeIN.txt 1 //24点统计 2 3 #include <iostream> 4 #include <cmath> 5 using namespace std; 6 #define N 14 7 //a数组存四个数字 8 int cixu[3],fuHao[3],p[N],sum = 0; 9 float a0[4

Java实验项目二——小学生考试系统(简单四则运算)

Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建立类TestSystem 3 * 4 * */ 5 6 package entity; 7 8 public class TestSystem { 9 10 private int num1; //声明两个操作数 11 private int num2; 12 private String oper

简单四则运算的随机输入

java练习 课堂练习题目,随机输入一个简单的四则运算,符号也随机,不输出结果. 代码: 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 String[] number = {"0","1","2","4","5","6","7","8&quo

自动生成简单四则运算的C语言程序

该程序是在博客园里面找的,具体是谁的找了半天没找到,无法提供它原本的链接.由于自己写的过于简单,且有一些功能暂时无法实现,所以就找了一个来应付作业,望原谅.在这个程序的源码中我改了一个错误的地方,源码中有这样一个随机数发生器的初始化函数的语句:"srand((unsigned)time(NULL))".srand函数是随机数发生器的初始化函数.但是正确的写法应该是:srand(unsigned( time(NULL))):为了防止随机数每次重复,常常使用系统时间来初始化,即使用time

简单四则运算2设计思路

题目要求: 1.题目避免重复 2.可定制(数量/打印方式) 3.可以控制下列参数: 是否有乘除法.数值范围.加减有无负数.除法有无余数.是否支持分数(真分数和假分数) 思路如下: 用变量控制四则运算的取值范围. 该取值可分为分数形式和整数形式. 分成+.-.*./四个模块,每个模块单独设计. 加减法法中分为正数和负数两种类型,除法中分为有余数和无余数两类. 用变量控制四则运算的取值范围. 每次显示10道题目,在每一部分中,根据输出的四则运算式得结果,判断结果是否相同,若相同,则继续判断第一部分的

简单四则运算的实现报告

需求分析 基础需求: 输入参数n,生成n个四则运算至命令行窗口,结果输出至文件. 其中,参数n为整数,运算符不少于两个不得大于五个,运算过程整体不可出现负数和非整数,输出文件名为"result.txt"(仅包含学号以及正确答案). 高级需求: 支持括号运算,支持真分数运算. 其中,只能出现正整数,真分数,结果为最简形式. 设计思路及功能设计 首设计两个函数,分被用来生成三个1-100随机的整数和两个运算符 而后在主函数中通过for循环不断生成随机数,运算符号病判断算式是否符合要求(通过

超简单四则运算

题目描述: 从<构建之法>第一章的 "程序" 例子出发,写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 支持加减乘除,运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目Myapp.exe -n 10 需求分析 1.支持整数四则运算: 2.判断用户的回答是否正确: 3.能够使用参数控制生成题目的个数. package test; import s