zoukankan      html  css  js  c++  java
  • 华为笔试题14

    输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
    注: 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

    简化版的四则运算:没有括号,只有加减乘除四种运算

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char str[]="1+2+3*9*6/4+4-9*8";
    	int len=strlen(str);
    	int *number=new int [len];
    	char *op=new char [len];
    	int k=0;
    	int count_number=0;
    	int count_op=0;
    	for(int i=0;i<len;)
    	{
    		if(('0'<=str[i])&&(str[i]<='9'))
    		{
    			number[count_number++]=str[i]-'0';			
    		}
    		else if(('+'==str[i])||(str[i]=='-'))
    			op[count_op++]=str[i];
    		else if('*'==str[i])		
    		{
    			number[count_number-1]=number[count_number-1]*(str[i+1]-'0');
    			i++;
    		}
    		else if('/'==str[i])
    		{
    			number[count_number-1]=number[count_number-1]/(str[i+1]-'0');
    			i++;
    		}
    		++i;
    	}
    	for(int i=0;i<count_number;++i)
    		cout<<number[i]<<" ";
    	cout<<endl;
    	for(int i=0;i<count_op;++i)
    		cout<<op[i]<<" ";
    	return 0;
    }
    

    运行结果为

    之后再做简单的 加减法运算即可

  • 相关阅读:
    java中并发包简要分析01
    java中的集合包简要分析
    多线程学习——终结任务
    大型高并发高负载网站的系统架构
    An expression evaluator
    java公式解析器学习与开发(2)——前缀表达式
    java公式解析器学习与开发(1)
    程序员遇到bug时常见的30种反应
    图论--SCC强连通缩点--Tarjan
    图论--割边--Tarjan模板
  • 原文地址:https://www.cnblogs.com/xd-jinjian/p/3277602.html
Copyright © 2011-2022 走看看