华为机试 计算加减乘除数学表达式的结果

转载 2014年04月28日 16:59:42

源   代码链接http://codepad.org/s7KRVYiV

#include <stdlib.h>

#include <stdio.h>
#include <string.h>
//是const char* 问题不能改成char* 指针的问题 华为机试


int cal(int len,const char *str)
{
struct{
char data1[200];
int top;
}opstack;


opstack.top=-1;
int i=0; //遍历字符串的下标
int t=0;//后缀表达式的长度

char ch=str[i];
char suffix[200];
while(ch!='\0')//判断字符串是否遍历完//编译器自动在字符串的末尾加了'\0'
{
switch(ch)
{
case '+':
case '-':
while(opstack.top!=-1)
{
suffix[t]=opstack.data1[opstack.top];
opstack.top--;
t++;
}
opstack.top++;
opstack.data1[opstack.top]=ch;
break;
case '*':
case '/':
while(opstack.top!=-1&& (opstack.data1[opstack.top] =='*' || opstack.data1[opstack.top] =='/') )
{
suffix[t]=opstack.data1[opstack.top];
                opstack.top--;
t++;
}
opstack.top++;
opstack.data1[opstack.top]=ch;
break;
default:
suffix[t]=ch;//语法有问题???????
t++;
break;
}
i++;
ch=str[i];
}
while(opstack.top!=-1)
{
suffix[t]=opstack.data1[opstack.top];
opstack.top--;
t++;
}
    suffix[t]='\0';

struct
{
int num[200];
int top;
}data;


data.top=-1;
i=0;
ch=suffix[i];

while(ch!='\0')
{
if(ch>='0'&&ch<='9')
{
data.top++;
data.num[data.top]=ch-'0';
}
else if('+'==ch)
{
int tmp=data.num[data.top-1]+data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
else if('-'==ch)
{
int tmp=data.num[data.top-1]-data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
else if('*'==ch)
{
int tmp=data.num[data.top-1]*data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
else if('/'==ch)
{
if(data.num[data.top]==0)
{
printf("error\n");
exit(1);
}
int tmp=data.num[data.top-1]/data.num[data.top];
data.top--;
data.num[data.top]=tmp;
}
i++;
ch=suffix[i];
}
return data.num[data.top];
}
int main()
{
char *a="3+6*4/2";
int result=cal(strlen(a),a);
printf("%d\n",result);
return 0;

}


运行结果codepad:



2017年华为实习编程题

2017年华为实习在线笔试编程题
  • u013760355
  • u013760355
  • 2017-03-17 20:08:15
  • 3296

华为2017校招机试题

1. 同网CS 描述: 小明同学最近新购置了电脑,想和其他同学玩CS,但是建了局域网游戏之后,别人加不进来,自己也进不了别人的主机,非常苦恼。于是来请教同宿舍的“科技怪人”小犀,小犀说了句“你的IP...
  • shymi1991
  • shymi1991
  • 2016-09-03 18:46:03
  • 3174

输入数学表达式并计算出结果(包括小数)

输入数学表达式并计算出结果(包括小数) 萨达斯 要求如下: /**  * 输入一个数学计算表达式,如:1+2  * 然后输出计算后的结果:1+2=3  * 这里计算表达式只计算一次即可,可以使用加减...
  • wangqing84411433
  • wangqing84411433
  • 2016-12-11 17:13:50
  • 1429

//键盘输入算数表达式(字符串的),求计算结果.

//键盘输入算数表达式(字符串的,一位正整数运算),求计算结果. #include using namespace std; char count(char a,char b,char...
  • z474263814
  • z474263814
  • 2013-03-22 09:14:05
  • 996

机试——华为

需要识记的点1、qsort void qsort(void * base, int num_elem, int size_elem, int (fcmp)(const void ,const vo...
  • tanxuan231
  • tanxuan231
  • 2015-08-28 21:00:49
  • 302

2017华为笔试题3

一、拼音与英文互相转换的函数1.1 题目编写一个拼音与英文互相转换的函数,如果输入的电话号码是英文单词,输出对应的电话号码的中文拼音。如果输入的电话号码是中文拼音,输出对应的电话号码的英文单词。...
  • u014800380
  • u014800380
  • 2017-08-30 21:12:22
  • 1828

lua 字符串数学表达式运算

--ansi数学运算 function charMathOperation(str) function chartoint(chstr) chstr=string.sub(chstr,2,2)...
  • weinyZhou
  • weinyZhou
  • 2012-05-13 14:07:33
  • 1934

华为OJ——表达式求值

表达式求值 题目描述 给定一个字符串描述的算术表达式,计算出结果值。 输入字符串长度不超过100,合法的字符包括”+, -, *, /, (, )”,”0-9”,字符串内容的合法性及表达式语法的合法性...
  • u010480899
  • u010480899
  • 2016-07-15 20:32:40
  • 539

2017年3月17日华为内推上机考试

刚刚考完上机来写一波自己的解答:第一题import java.util.Scanner;/** * Created by Xavier on 2017/3/15. * 写出一个程序,输入一个字符串...
  • xavierqwb
  • xavierqwb
  • 2017-03-17 21:15:11
  • 2070

华为机试---表达式合法判断

 题目描述 写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。) 给定一个表达式A,请返回一个bool值,代表它是否合法。...
  • bigthinker
  • bigthinker
  • 2016-06-22 12:01:01
  • 1403
收藏助手
不良信息举报
您举报文章:华为机试 计算加减乘除数学表达式的结果
举报原因:
原因补充:

(最多只允许输入30个字)