/* 程序问题注释开始
-
程序的版权和版本声明部分
-
Copyright © 2020,湖南工程职业技术学院信息工程学院学生
-
文件名称: 蓝桥杯赛题
-
作 者: 李 斌
-
完成日期: 2020 年 04 月 11日
-
对任务及求解方法的描述部分
-
问题描述
编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“ 运算符 对象1 对象2 ”,其中,运算符为 “ + ”(加法)、“ - ”(减法)、“ * ”(乘法)或 “ / ”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。
输入格式:输入只有一行,即一个前缀表达式字符串。
输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
输入输出样例 -
样例输入
+ 5 2 -
样例输出
7 -
程序问题注释结束
*/
//2020.04.11 16.55
package 前缀表达式;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
//用户输入操作符
char operator=in.next().charAt(0);
//接收操作数
String str=in.nextLine();
//去前导空格
str=str.trim();
//选择操作对象
switch(operator)
{
//加法
case '+':
System.out.println(add(str));
break;
//减法
case '-':
System.out.println(reduce(str));
break;
//乘法
case '*':
System.out.println(multiplay(str));
break;
//除法
case '/':
System.out.println(divide(str));
break;
}
}
//加法(减法、乘法、除法注释大同小异)
public static int add(String str)
{
//存储结果
int result=0;
//循环取数据
for(int i=0;i<=str.length();i++)
{
//str1存储数值字符串
String str1="";
//取数字字符
char ch=str.charAt(i);
//取出一个数值
while(ch!=' ')
{
i++;
//连接字符与之前字符串
str1+=ch;
//判断越界的情况
if(i==str.length())
{
break;
}
else
{
//未越界继续取
ch=str.charAt(i);
}
}
//做运算
result+=Integer.valueOf(str1);
}
//返回
return result;
}
//减法
public static int reduce(String str)
{
int result=0;
//标记是否为第一个数值
int first=1;
for(int i=0;i<str.length();i++)
{
String str1="";
char ch=str.charAt(i);
while(ch!=' ')
{
i++;
str1+=ch;
if(i==str.length())
{
break;
}
else
{
ch=str.charAt(i);
}
}
//第一个数分别减后面所有数
if(first==1)
{
first=0;
result=Integer.valueOf(str1);
}
else
{
result-=Integer.valueOf(str1);
}
}
return result;
}
//乘法
public static long multiplay(String str)
{
//乘法从1开始
int result=1;
for(int i=0;i<str.length();i++)
{
String str1="";
char ch=str.charAt(i);
while(ch!=' ')
{
i++;
str1+=ch;
if(i==str.length())
{
break;
}
else
{
ch=str.charAt(i);
}
}
result*=Integer.valueOf(str1);
}
return result;
}
//除法
public static int divide(String str)
{
int result=1;
//标记是否为第一个数值
int first=1;
for(int i=0;i<str.length();i++)
{
String str1="";
char ch=str.charAt(i);
while(ch!=' ')
{
i++;
str1+=ch;
if(i==str.length())
{
break;
}
else
{
ch=str.charAt(i);
}
}
if(first==1)
{
first=0;
result=Integer.valueOf(str1);
}
//除数为0的情况
else if(Integer.valueOf(str1)==0)
{
//除数为0返回-1
result=-1;
break;
}
else
{
result/=Integer.valueOf(str1);
}
}
return result;
}
}
运行结果: