【蓝桥杯】前缀表达式(Java实现)


/* 程序问题注释开始

  • 程序的版权和版本声明部分

  • 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;
	}
}

运行结果:
运行结果

猜你喜欢

转载自blog.csdn.net/qq_46354133/article/details/105455836