面试题 简单的字符串表达式四则运算(不考虑括号)
2017-08-17 18:12
555 查看
题目要求
简单四则运算
问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
【输出】 无
【返回】 计算结果
示例
1) 输入: “1+4*5-8/3”
函数返回:19
2) 输入: “8/3*3”
函数返回:6
实现代码:
package InerviewTest;
public class HuaWeiTest
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
String s="3+4*12+2";
System.out.println(s+"="+Test.calculate(s));
}
}
/*****************************************************************
简单四则运算
问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
【输出】 无
【返回】 计算结果
示例
1) 输入: “1+4*5-8/3”
函数返回:19
2) 输入: “8/3*3”
函数返回:6
*****************************************************************/
class Test
{
public static int calculate(String str)
{
//数据存储
char []temp=str.toCharArray();
int len=temp.length;
char []symbol=new char[len];
int []value=new int[len];
int i=0,j=0;
for(int k=0;k<temp.length;k++)
{
if(isSymbol(temp[k]))//是符号
{
symbol[i++]=temp[k];
}
else
{
StringBuffer buff=new StringBuffer();
while(k<temp.length&&!isSymbol(temp[k]))//不是符号
{
buff.append(temp[k]);
k++;
}
value[j++]=Integer.parseInt(new String(buff));
k--;
}
}
//索引的边界
i--;
j--;
/* 显示处理后的数值数组、符号数组
for(int temp_i=0;temp_i<=i;temp_i++)
System.out.print(symbol[temp_i]+" ");
for(int temp_i=0;temp_i<=j;temp_i++)
System.out.print(value[temp_i]+" ");
System.out.println();
*/
//先进行* 和/的运算
for(int s_i=0;s_i<=i;s_i++)//遍历符号表
{
if(symbol[s_i]=='*')
{
value[s_i+1]=value[s_i]*value[s_i+1];
value[s_i]=Integer.MAX_VALUE;
symbol[s_i]='#';
}
else if(symbol[s_i]=='/')
{
value[s_i+1]=value[s_i]/value[s_i+1];
value[s_i]=Integer.MAX_VALUE;
symbol[s_i]='#';
}
}
/* *和/的运算后的原数组
for(int temp_i=0;temp_i<=i;temp_i++)
System.out.print(symbol[temp_i]+" ");
for(int temp_i=0;temp_i<=j;temp_i++)
System.out.print(value[temp_i]+" ");
System.out.println();
*/
int update_i=0,update_j=0;
char []update_symbol=new char[i+1];
int []update_value=new int[j+1];
for(int p=0;p<=i;p++)
{
if(symbol[p]!='#')
update_symbol[update_i++]=symbol[p];
}
for(int p=0;p<=j;p++)
{
if(value[p]!=Integer.MAX_VALUE)
update_value[update_j++]=value[p];
}
//索引边界
update_i--;
update_j--;
/* 去除两个数组中的无效元素
for(int temp_i=0;temp_i<=update_i;temp_i++)
System.out.print(update_symbol[temp_i]+" ");
for(int temp_i=0;temp_i<=update_j;temp_i++)
System.out.print(update_value[temp_i]+" ");
System.out.println();
*/
//后进行+和-的运算
for(int s_i=0;s_i<=update_i;s_i++)//遍历符号表
{
if(update_symbol[s_i]=='+')
{
update_value[s_i+1]=update_value[s_i]+update_value[s_i+1];
//value[s_i]=Integer.MAX_VALUE;
}
else if(update_symbol[s_i]=='-')
{
update_value[s_i+1]=update_value[s_i]-update_value[s_i+1];
//value[s_i]=Integer.MAX_VALUE;
}
}
return update_value[update_j];
}
public static boolean isSymbol (char s)
{
if(s=='+'||s=='-'||s=='*'||s=='/')
return true;
else
return false;
}
}
简单四则运算
问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
【输出】 无
【返回】 计算结果
示例
1) 输入: “1+4*5-8/3”
函数返回:19
2) 输入: “8/3*3”
函数返回:6
实现代码:
package InerviewTest;
public class HuaWeiTest
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
String s="3+4*12+2";
System.out.println(s+"="+Test.calculate(s));
}
}
/*****************************************************************
简单四则运算
问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
【输出】 无
【返回】 计算结果
示例
1) 输入: “1+4*5-8/3”
函数返回:19
2) 输入: “8/3*3”
函数返回:6
*****************************************************************/
class Test
{
public static int calculate(String str)
{
//数据存储
char []temp=str.toCharArray();
int len=temp.length;
char []symbol=new char[len];
int []value=new int[len];
int i=0,j=0;
for(int k=0;k<temp.length;k++)
{
if(isSymbol(temp[k]))//是符号
{
symbol[i++]=temp[k];
}
else
{
StringBuffer buff=new StringBuffer();
while(k<temp.length&&!isSymbol(temp[k]))//不是符号
{
buff.append(temp[k]);
k++;
}
value[j++]=Integer.parseInt(new String(buff));
k--;
}
}
//索引的边界
i--;
j--;
/* 显示处理后的数值数组、符号数组
for(int temp_i=0;temp_i<=i;temp_i++)
System.out.print(symbol[temp_i]+" ");
for(int temp_i=0;temp_i<=j;temp_i++)
System.out.print(value[temp_i]+" ");
System.out.println();
*/
//先进行* 和/的运算
for(int s_i=0;s_i<=i;s_i++)//遍历符号表
{
if(symbol[s_i]=='*')
{
value[s_i+1]=value[s_i]*value[s_i+1];
value[s_i]=Integer.MAX_VALUE;
symbol[s_i]='#';
}
else if(symbol[s_i]=='/')
{
value[s_i+1]=value[s_i]/value[s_i+1];
value[s_i]=Integer.MAX_VALUE;
symbol[s_i]='#';
}
}
/* *和/的运算后的原数组
for(int temp_i=0;temp_i<=i;temp_i++)
System.out.print(symbol[temp_i]+" ");
for(int temp_i=0;temp_i<=j;temp_i++)
System.out.print(value[temp_i]+" ");
System.out.println();
*/
int update_i=0,update_j=0;
char []update_symbol=new char[i+1];
int []update_value=new int[j+1];
for(int p=0;p<=i;p++)
{
if(symbol[p]!='#')
update_symbol[update_i++]=symbol[p];
}
for(int p=0;p<=j;p++)
{
if(value[p]!=Integer.MAX_VALUE)
update_value[update_j++]=value[p];
}
//索引边界
update_i--;
update_j--;
/* 去除两个数组中的无效元素
for(int temp_i=0;temp_i<=update_i;temp_i++)
System.out.print(update_symbol[temp_i]+" ");
for(int temp_i=0;temp_i<=update_j;temp_i++)
System.out.print(update_value[temp_i]+" ");
System.out.println();
*/
//后进行+和-的运算
for(int s_i=0;s_i<=update_i;s_i++)//遍历符号表
{
if(update_symbol[s_i]=='+')
{
update_value[s_i+1]=update_value[s_i]+update_value[s_i+1];
//value[s_i]=Integer.MAX_VALUE;
}
else if(update_symbol[s_i]=='-')
{
update_value[s_i+1]=update_value[s_i]-update_value[s_i+1];
//value[s_i]=Integer.MAX_VALUE;
}
}
return update_value[update_j];
}
public static boolean isSymbol (char s)
{
if(s=='+'||s=='-'||s=='*'||s=='/')
return true;
else
return false;
}
}
相关文章推荐
- C++ 四则运算表达式(简单的+-*/带括号) 栈
- java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
- 计算带括号的四则运算表达式
- 计算一个字符串表示的四则运算表达式
- 四则运算表达式解析和求值(支持括号、小数)
- 字符串四则运算表达式的算法
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)
- 含括号和四则运算符的简单表达式的计算【c++ 50 lines】
- c++通过栈和递归函数实现简单四则运算以及括号的的计算器
- 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
- 带括号的四则运算表达式的求值(栈实现)
- 栈实现简单的四则运算表达式
- boost正则表达式判断字符串是不是正确的四则运算
- 计算字符串四则运算表达式
- 面试题45:字符串四则运算的实现
- 一个简单的四则运算程序C语言实现--无法处理括号
- 在Java中计算四则运算表达式字符串的值
- 字符串四则运算表达式的计算(华为机试)
- 字符串四则运算表达式的计算(华为机试)
- 栈的应用,实现简单的不带括号的四则运算