华为笔试题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;
}

浙公网安备 33010602011771号