问题描述:
* 1、给出一个算数表达式,计算该表达式的结果.
* 2、表达式格式为:数字字符 ‘0’....到'9',运算符'+','*' 组成。
* 3、要求,不要调用任何的api来实现 ,使用简单的加减乘除操作来完成。
/**
*问题描述:
* 1、给出一个算数表达式,计算该表达式的结果.
* 2、表达式格式为:数字字符 ‘0’....到'9',运算符'+','*' 组成。
* 3、要求,不要调用任何的api来实现 ,使用简单的加减乘除操作来完成。
*
* 解题思路:
* 1、扫描表达式,对于加法操作可以直接相加,对于乘法操作,先计算乘法表达式的值,然后再相加到结果集中去。
*/
/**
* User: wb-cuitongxin
* Date: 13-6-13
*/
public class CaculateChar {
public static void main(String[] args) {
//需要计算结果的表达式
String expression = "2*3*2+1+2+3*2*2*2";
//调用方法并且计算结果
int result = caculateExpression(expression);
System.out.println(result);
}
private static int caculateExpression(String expression) {
char[] ca = expression.toCharArray();
int length = ca.length; //表达式的总体长度
int sum = 0; //存放加法的结果集
int multiplication = 1; //存放乘法的结果集
int i = 1; //循环字符串的开始下标
//循环字符串求结果
while (i<length) {
//如果当前字符是 乘法符号 '*'
if(ca[i] == '*') {
multiplication = ca[i-1] - 48; //把乘号前面的值赋值给--乘法基数变量
multiplication = multiplication * (ca[i+1] - 48); // 乘号两边的数字相乘
//判断是否存在连乘的情况
int j = i+2; //取当前乘号的下一个符号
while (j<length && ca[j] == '*') { //如果当前符号的下一个符号是'*' 表示是连乘
multiplication = multiplication * (ca[j+1]-48); //计算连乘的结果
j = j+2; //移动连乘的下标
}
sum = sum + multiplication; //把乘法的结果加到总的结果中
i = j;
continue;
}
//如果当前符号是'+'号
if (ca[i] == '+') {
//如果表达式的第一个符号元素是'+',则直接把该符号前面的元素放入结果集中去
if (i==1) {
sum = sum + (ca[i-1] - 48);
i = i + 2;
continue;
}
if (ca[i-2] == '+') {
sum = sum + (ca[i-1] - 48);
i = i + 2;
if (i == length) {
sum = sum + (ca[i-1] - 48);
break;
}
continue;
}
//如果倒数第二个符号是'+'号,则直接把数字加入到结果集中即可
if (i == ca.length - 2) {
sum = sum + (ca[i+1] - 48);
i = i + 2;
break;
}
int j = i+2;
while (j<length && ca[j] == '+') {
sum = sum + (ca[j-1] - 48);
j = j + 2;
}
i = j;
continue;
}
}
return sum;
}
}
目前这是第一个版本,之后会实现第二个版本