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

问题描述:

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

注:

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

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

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

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

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

思想是将数字和符号分别放在两个栈里,用C++实现:

 1 #include <iostream>
 2 using namespace std;
 3
 4 int calculate(int len, char *expStr)
 5 {
 6     int num[50],op[50];
 7     int numCount=0,opCount=0,result=0;
 8     int i;
 9     num[numCount++]=expStr[0]-‘0‘;
10     for (i=1;i<len-1;i+=2)
11     {
12         if (expStr[i]==‘+‘||expStr[i]==‘-‘)
13         {
14             num[numCount++]=expStr[i+1]-‘0‘;
15             op[opCount++]=expStr[i];
16         }
17         else if (expStr[i]==‘*‘)
18         {
19             num[numCount-1]=num[numCount-1]*(expStr[i+1]-‘0‘);
20         }
21         else if (expStr[i]==‘/‘)
22         {
23             num[numCount-1]=num[numCount-1]/(expStr[i+1]-‘0‘);
24         }
25     }
26     result=num[0];
27     for (i=0;i<opCount;i++)
28     {
29         if (op[i]==‘+‘)
30         {
31             result+=num[i+1];
32         }
33         else if (op[i]==‘-‘)
34         {
35             result-=num[i+1];
36         }
37     }
38     return result;
39 }
40
41 int main()
42 {
43     int len;
44     char *expStr=new char[100];
45     int i;
46     while(cin>>expStr)
47     {
48         len=0;
49         for (i=0;expStr[i];i++)
50         {
51             len++;
52         }
53         cout<<calculate(len,expStr)<<endl;
54     }
55     return 0;
56 }

运行结果:

时间: 2024-08-04 17:43:48

华为机考--简单四则运算的相关文章

20150912华为机考1之&quot;输入一个字符串,将其中出现次数最多的字符输出&quot;

不吐槽华为的服务器了,直接上正文 输入:字符串(英文字母),长度不超过128 输出:出现频率最高的字母 思路写在注释文档 /* Input a string * Output the most frequent character * * The way of thinking: * using ASCII, count the number of each character * then find out the max number(max_num) * and its according

20150912华为机考2之&quot;输入一段字符串(英文),将每个单词首字母大写后输出&quot;

还有其他一些(隐性)要求(要不然无法通过测试): 1.如果首字母已经大写,则不用变 2.不是英文字母的不变 e.g. Input: hello world! this is _Ljj speaking! Output: Hello World! This Is _ljj Speaking! 思路写在注释里面了 /* Input a string * Output: uppercase the first character of evrey word * if already uppercase

华为机考--数组比较

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素.请编程实现上述比较,并返回比较中发现的不相等元素的个数 比如: 数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3 要求实现函数: int array_compare(int len1, int array1[], int len2, int array2[]) [

2016华为机试题——简单记录

记录出错的代码所在的文件名称和行号. 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加:(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符:(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)3.输入的文件可能带路径,记录文件名称不能带路径 输入描述: 一行或多行字符串.每行包括带路径文件名称,行号,以空格隔开. 文件路径为windows格式 如:E:\V1R2\prod

华为机考--亮着电灯的盏数

亮着电灯的盏数 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1.2.3.…n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着.有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着.注:电灯数和学生数一致. 用C++实现: 1 #inc

华为机考--约瑟夫问题

问题描述:    输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m.从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止.如果计数到达数列尾段,则返回数列首位置继续计数.请编程实现上述计数过程,同时输出数值出列的顺序比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4

华为机考--字符串压缩

通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1. 仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 2. 压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz" 1 #include <iost

华为机考题 004字符串分割

转自:http://blog.csdn.net/sxl_545/article/details/52412203 华为机考题 004字符串分割 标签: 华为机考刷题 2016-09-02 11:10 46人阅读 评论(0) 收藏 举报  分类: 华为机考刷题(3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入

[华为机试练习题]36.简单错误记录(错误 求正解)

题目 描述: 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: 2. 超过16个字符的文件名称,只记录文件的最后有效16个字符: 3. 输入的文件可能带路径,记录文件名称不能带路径. 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一行或多行字符串.每行包括带路径文件名称,行号,以空格