华为笔试题12

  • 题目描述:

实现一个正整数加、减、乘、除四则混合运算求值方法

条件限定:

1、 输入的四则运算式由'+','-','*','/'运算符及正整数组成;

2、 无需考虑特殊字符,及除不尽的情况;

3、 无需考虑运算符的优先级,加减乘除优先级一样,仅按照自左至右的顺序依次计算;

4、 当遇到除数为0时,即刻返回当前已计算结果。

  • 要求实现函数:

void CalCarithmeticRlt(const char *pInputStr, int *lOutputRlt);

【输入】 pInputStr:  输入字符串

【输出】 lOutputRlt: 输出计算结果

【注意】不用考虑输入四则运算式非法情况

  • 示例

输入:“2+1*4-2/5”

输出:“2”

#include "stdafx.h"
#include <iostream>
using namespace std;

int calculate(int a,int b,char c)
{
	switch(c)
	{
	case '+':
		return a+b;
	case '-':
		return a-b;
	case '*':
		return a*b;
	case '/':
		return a/b;
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	char str[]="289+100*7-2/8";
	int number[5]={0};
	char sign[5];
	int i=0,j=0;
	int temp=0;
	int count=0;
	
	while(j<strlen(str))
	{
		temp=0;
		while(('0'<=str[i])&&(str[i]<='9')&&i<strlen(str))
		{
			temp=10*temp+str[i]-'0';
			++i;
		}
		sign[count]=str[i];
		number[count++]=temp;		
		j=i;
		i++;
	}
	
	cout<<number[0]<<" "<<number[1]<<" "<<number[2]<<" "<<number[3]<<" "<<number[4]<<endl;
	cout<<sign[0]<<" "<<sign[1]<<" "<<sign[2]<<" "<<sign[3]<<" "<<sign[4]<<endl;


	int result=0;
	temp=number[0];
	for(int i=0;i<5;i++)
	{
		
		temp=calculate(temp,number[i+1],sign[i]);
		if(4==i)
			break;
		
		cout<<temp<<endl;
	}
	
//	cout<<temp;
	return 0;
}

  

 

原文地址:https://www.cnblogs.com/xd-jinjian/p/3277217.html