面试题 16.26. 计算器
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
class Solution {
public int calculate(String s)
{
int n = s.length();
String c1[] = new String[n];
for(int k =0;k<n;k++)
{
c1[k] = "";
}
int temp = 0;
int i = 0;
int count =0;
for(int j= 0;i<n;i++)
{
if(s.charAt(i)==' ')
{
continue;
}
if(s.charAt(i)=='-')
{
j++;
c1[j]+="-";
j++;
count+=2;
}else if(s.charAt(i)=='+')
{
j++;
c1[j]+="+";
j++;
count+=2;
}else if (s.charAt(i)=='*')
{
j++;
c1[j]+="*";
j++;
count+=2;
}else if(s.charAt(i)=='/')
{
j++;
c1[j]+="/";
j++;
count+=2;
}else
{
c1[j]+=s.charAt(i);
}
}
int flag =count;
for(int k = 0,h = 0;k<=count;k++,h++)
{
if(c1[k].equals("*"))
{
int a = Integer.parseInt(c1[h-1])*Integer.parseInt(c1[k+1]);
c1[h-1] = "";
c1[h-1]+=a;
flag-=2;
h--;
k++;
}else if(c1[k].equals("/"))
{
int a = Integer.parseInt(c1[h-1])/Integer.parseInt(c1[k+1]);
c1[h-1] = "";
c1[h-1]+=a;
System.out.println(c1[h-1]);
flag-=2;
h--;
k++;
}else
{
c1[h] = c1[k];
}
}
int tc = 0;
if(flag<=0)
{
return Integer.parseInt(c1[0]);
}
for(int k = 0;k<=flag;k++)
{
if(c1[k].equals("-"))
{
tc = tc-Integer.parseInt(c1[k+1]);
k++;
}else if(c1[k].equals("+"))
{
tc = tc+Integer.parseInt(c1[k+1]);
k++;
}else
{
tc+=Integer.parseInt(c1[k]);
}
}
return tc;
}
}