源   代码链接http://codepad.org/s7KRVYiV

#include <stdlib.h>

#include <stdio.h>
#include <string.h>
//是const char* 问题不能改成char* 指针的问题 华为机试

int cal(int len,const char *str)
{
struct{
char data1[200];
int top;
}opstack;

opstack.top=-1;
int i=0; //遍历字符串的下标
int t=0;//后缀表达式的长度

char ch=str[i];
char suffix[200];
while(ch!='\0')//判断字符串是否遍历完//编译器自动在字符串的末尾加了'\0'
{
switch(ch)
{
case '+':
case '-':
while(opstack.top!=-1)
{
suffix[t]=opstack.data1[opstack.top];
opstack.top--;
t++;
}
opstack.top++;
opstack.data1[opstack.top]=ch;
break;
case '*':
case '/':
while(opstack.top!=-1&& (opstack.data1[opstack.top] =='*' || opstack.data1[opstack.top] =='/') )
{
suffix[t]=opstack.data1[opstack.top];
                opstack.top--;
t++;
}
opstack.top++;
opstack.data1[opstack.top]=ch;
break;
default:
suffix[t]=ch;//语法有问题???????
t++;
break;
}
i++;
ch=str[i];
}
while(opstack.top!=-1)
{
suffix[t]=opstack.data1[opstack.top];
opstack.top--;
t++;
}
    suffix[t]='\0';

struct
{
int num[200];
int top;
}data;

data.top=-1;
i=0;
ch=suffix[i];

while(ch!='\0')
{
if(ch>='0'&&ch<='9')
{
data.top++;
data.num[data.top]=ch-'0';
}
else if('+'==ch)
{
int tmp=data.num[data.top-1]+data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
else if('-'==ch)
{
int tmp=data.num[data.top-1]-data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
else if('*'==ch)
{
int tmp=data.num[data.top-1]*data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
else if('/'==ch)
{
if(data.num[data.top]==0)
{
printf("error\n");
exit(1);
}
int tmp=data.num[data.top-1]/data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
i++;
ch=suffix[i];
}
return data.num[data.top];
}
int main()
{
char *a="3+6*4/2";
int result=cal(strlen(a),a);
printf("%d\n",result);
return 0;

}

运行结果codepad:

华为机试 计算加减乘除数学表达式的结果相关推荐

  1. 华为机试——计算面积

    [计算面积] 绘图机器的绘图笔初始位i在原点(0.0). 机器启动后其绘图笔按下面规则绘制直线: 1 )尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E, 2 )期间可通过指令在纵坐标轴方向进行偏移 ...

  2. 华为机试——计算字符个数

    题目描述 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符. ...

  3. 牛客网--华为机试在线训练2:计算字符个数

    牛客网–华为机试在线训练2:计算字符个数 题目描述 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 输入一个有字母 ...

  4. 【华为机试】HJ2 计算某字符出现次数

    [华为机试]HJ2 计算某字符出现次数 ## [华为机试]HJ2 计算某字符出现次数 ## [华为机试]HJ2 计算某字符出现次数 ## [华为机试]HJ2 计算某字符出现次数 ## [华为机试]HJ ...

  5. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  6. 牛客在线编程-华为机试-中等

    牛客在线编程题目-华为机试-中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21.21% HJ17 坐标移动 字符串 中等 24.79% HJ20 密码验证合格程序 数组 字 ...

  7. 集合篇10.华为机试(涮题记录2)

    华为机试 31.成绩排序(**not) 32. 矩阵乘法 33. 24点游戏算法(not) 34.配置文件恢复 35. 查找两个字符串a.b中的最长公共子串 36.MP3光标位置(not) 37.DN ...

  8. 华为机试真题分类汇总

    1. 字符串 类别 题目 知识点 题目分值 / 难度 字符串 [华为机试真题 JAVA]TLV解析Ⅰ-100 字符串分隔.拼接.搜索 100/中等 字符串 [华为机试真题 JAVA]寻找相同子串-10 ...

  9. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

最新文章

  1. ArcEngine 直连连接SDE
  2. spring mvc 接收页面表单List
  3. Office 2007无法修复、卸载、重装
  4. [排序算法] 选择排序(2种)
  5. Android --- build.gradle(Module:app)中各版本号讲解,例如targetSdkVersion
  6. STL - bitset
  7. Azure IoT Hub和Event Hub相关的技术系列-索引篇
  8. 优化算法笔记|灰狼算法理解及Python实现
  9. 【cl】本地安装maven的jar包报错Artifact is already in the local repository
  10. 软考网络规划设计师考试要求
  11. 安卓fragment笔记
  12. gini系数 决策树_决策树原理,机器学习系列
  13. 如何优化及安全设置Linux系统
  14. 制作动画的软件flash
  15. Linux设置小红点键盘,debian linux上安装thinkpad小红点驱动/Installing Debian On Thinkpad – Trackpoint...
  16. table表格表头添加斜线
  17. 禁区——不要走入政府采购的“黑名单”
  18. 第四节(4.4) 维修技巧 电路图识图
  19. 六种常见的平面设计构图技巧
  20. FPGA——PS/2驱动

热门文章

  1. 一文读懂现代化的智能天线技术
  2. linux 设备直通,使用virtualbox运行物理硬盘的系统 USB设备直通,支持网银、刷...
  3. Java ASP Post
  4. 【电机控制】六步法驱动BLDC电机,使用硬件COM事件,STM32+CUBEMX(HAL库)配置
  5. 阿里数据中台OneID核心能力之ID-Mapping
  6. Linux中批量修改文件名
  7. 黑苹果下idea启动项目慢
  8. 云游戏GPU虚拟化技术分析
  9. 淘宝、1688海外站、外贸站搭建,代购系统源码PHP前端源码展示。
  10. stm32f103 id绑定软件加密破解方法