简单四则运算
问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
代码实现:
#include <stdio.h>
#include <stdlib.h>
// 1.使用链表实现,先定义链表
struct node
{
char d1; // 存放字符,若为 @ 说明 d2 有效
int d2; // 存放经过运算的结果,一个字符不足以保存结果
struct node* next;
};
typedef struct node *pnode;
typedef pnode mylist;
// 2.实现字符串到链表的转换
mylist create(char str[])
{
pnode head,tmp;
head = tmp = (pnode)malloc(sizeof(struct node));
head ->d1 = str[0];
head ->d2 = -1;
while(*(++str) != '\0')
{
tmp->next = (pnode)malloc(sizeof(struct node));
tmp = tmp->next;
tmp->d1 = *str;
tmp->d2 = -1;
}
tmp->next = NULL;
return head;
}
// 3.实现运算合并节点,例如 "7*2" 合并为 "14"
void merge(pnode loc,char sym)
{
int ans,left,right;
pnode pre,cur,rear;
pre = loc;
cur = pre ->next;
rear = cur ->next;
if (pre->d1 == '@')
left = pre->d2;
else
left = pre->d1 - '0';
if (rear->d1 == '@')
right = rear->d2;
else
right = rear->d1 - '0';
switch(sym)
{
case '+':
ans = left + right;
break;
case '-':
ans = left - right;
break;
case '*':
ans = left * right;
break;
case '/':
ans = left / right;
break;
default:
break;
}
pre->d1 = '@';
pre->d2 = ans;
pre->next = rear->next;
free(cur);
free(rear);
}
// 4.主要计算函数,若有字符串"8+7*2-9/3",计算出其值为19。
int calculate(int len,char *expStr)
{
mylist ml = create(expStr);
// a.扫描找到 */ 的位置,计算
pnode tmp,rear;
rear = ml;
while (rear != NULL)
{
char sym = (char)(rear->d1);
if (sym == '*' || sym == '/')
{
merge(tmp,sym);
rear = tmp;
}
tmp = rear;
rear = rear->next;
}
// b.扫描找到 +- 的位置,计算
rear = ml;
while (rear != NULL)
{
char sym = (char)(rear->d1);
if (sym == '+' || sym == '-')
{
merge(tmp,sym);
rear = tmp;
}
tmp = rear;
rear = rear->next;
}
return ml->d2;
}
int main(int argc, char* argv[])
{
char str[] = "8+7*2-9/3";
printf("%d\n",calculate(strlen(str),str));
system("pause");
return 0;
}
分享到:
相关推荐
"华为上机题库整理" 今天,我们将要讨论华为上机题库整理,这是一个非常重要的IT知识点。华为上机题库整理是指华为公司组织的编程考试,考生需要在规定的时间内完成编程任务。在这篇文章中,我们将详细介绍华为上机...
两道华为的c/c++语言上机测试题 两道华为的C语言上机题——包含答案.wps
【华为上机题】是针对华为公司招聘过程中的一项重要考核环节,主要测试应聘者的实际编程能力和问题解决能力。这类题目通常涵盖多种编程语言和技术领域,其中C语言是基础且重要的部分,因为它是计算机科学的基础,对...
【华为上机笔试题全】是一份集合了华为公司最新面试过程中可能出现的上机测试题目。这份资料旨在帮助应聘者了解并准备华为的技术面试环节,尤其是对于编程能力、算法理解以及实际操作技能的考察。虽然描述中提到...
华为面试,上机测试真题,各种算法分析、包含解答,一百多页,非常详细!
【知识点详解】 1. 约瑟夫环问题: ...这些知识点涵盖了数据结构(链表)、算法(约瑟夫环)、字符串处理、C语言基础、面试技巧和编程测试等多个方面,对于理解和准备华为的上机考试具有指导意义。
【华为校园招聘软件研发上机测试题解析】 在华为的校园招聘中,针对软件研发岗位的上机测试是一项重要的考核环节。通常,这样的测试会包括若干道编程题目,旨在评估应聘者的编程能力、逻辑思维以及对算法的理解。...
总的来说,华为上机试题是对综合IT技能的全面测试,涵盖了编程、网络、系统管理等多个领域,考生需要全面而扎实的技能储备才能在考试中脱颖而出。通过反复练习和实战,可以有效提升自己的技术水平,增加成功应聘的...
在.NET编程环境中,上机测试题常常涉及到基础的控制台操作和逻辑算法。本题目的目标是使用C#(.NET的主要编程语言之一)来绘制一个倒立的三角形,其形状如下: ``` ******* ***** *** * ``` 这是一个常见的编程...
2022年华为公司组织的Java机试题,是一份针对应聘者编程能力测试的参考资料。这份试题不仅对求职者进行技术层面的考核,更是对其逻辑思维和问题解决能力的深度考验。下面我们详细解析这些题目所涉及的知识点。 首先...
【华为校园招聘软件研发上机测试题解析】 华为在校园招聘软件研发岗位的上机测试中,通常会设计一些编程题目来评估应聘者的编程能力、逻辑思维和问题解决技巧。以下是对两套试题中部分题目的详细解析: 1. **选秀...
【华为上机历年题目】是针对想要在华为公司求职,特别是应聘软件工程师岗位的求职者们准备的一份宝贵资源。这份资料集包含了华为历年在面试过程中可能会遇到的上机题目,旨在帮助求职者们了解并熟悉华为的技术考察点...
【标题】2016华为oj上机题c++涵盖了华为在线评测系统中2016年的一系列C++编程题目,旨在考察和提升程序员在C++语言方面的编程能力、算法设计与问题解决技巧。这些题目是华为面向应聘者或内部员工进行技术能力评估的...
在主函数中,可以通过不同的测试数据来调用 `verifyMsisdn` 函数,以检查其正确性。 ### 三、字符串操作与指针使用 #### 3.1 字符串操作 ```c char *str = {"I", "LOVE", "CHINA"}; char *p = str; printf("%s", *...
"华为笔试上机题答案苏州和南京地区"这个标题表明这是一份针对华为公司在苏州和南京两地招聘笔试中上机题目的解答集。华为是全球知名的电信设备和消费电子制造商,其笔试题目通常涵盖计算机科学、信息技术、软件开发...
根据给定的文件信息,我们可以总结出以下三个与2017年华为校招上机考试相关的编程题目及其解析: ### 题目一:字符串字母转换 **题目描述**: 给定一个字符串,需要将字符串中的每个字母转换为其后的字母。即'a'...
2013__huawei(02)则可能涉及到2013年第二部分的华为上机测试,可能更加关注软件开发过程中的设计模式、软件架构、性能优化等方面的问题,这些都反映了程序员在项目开发中的实战经验和技术深度。 在准备这些上机题目...
【华为校园招聘上机笔试题】是华为公司在2010年针对软件开发岗位进行的一次校园招聘活动中采用的编程测试题目。此类考试通常旨在评估应聘者的C语言编程能力、逻辑思维以及问题解决技巧,是进入华为技术有限公司的...
【华为上机题目及答案】是一份集合了华为历年上机考试题目的资源,旨在全面覆盖华为题库中的各类编程题目。这份资料对于准备华为上机考试的考生来说,具有极高的参考价值,能帮助他们熟悉考试风格,提升解题技巧。 ...