蓝桥杯-P1103(复数表达式运算)

package exec;

import java.util.Scanner;

public class CKN {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		String ch=input.next();
		double a=input.nextDouble();
		double b=input.nextDouble();
		double c=input.nextDouble();
		double d=input.nextDouble();
		input.close();
		String s = "";
		if(ch.equals("+")) {
			s+=String.format("%.2f",(a+c));
			s+="+";
			s+=String.format("%.2f",(b+d));
		}
		else if(ch.equals("-")) {
			s+=String.format("%.2f",(a-c));
			s+="+";
			s+=String.format("%.2f",(b-d));
		}
		else if(ch.equals("*")) {
			s+=String.format("%.2f",(a*c-b*d));
			s+="+";
			s+=String.format("%.2f",(b*c+a*d));
		}
		else if(ch.equals("/")) {
			s+=String.format("%.2f",(a*c+b*d)/(c*c+d*d));
			s+="+";
			s+=String.format("%.2f",(b*c-a*d)/(c*c+d*d));
		}
		s+="i";
		System.out.println(s);
	}

}

题目中意思是,复数1为a+bi,复数2为c+di,通过前边输入的运算符,对这两个复数进行运算,输出结果也是个复数:

1.结果要求保留两位小数,因为我这里是拼接字符串的形式,所以要求数字的位数必须真正改变的,以往用%.2f只是在输出上显示两位,所以用String.format("%.2f",变量);可以控制格式,然后再赋值给一个变量即可;

2.再就是复数对乘法和除法的运算:

(1)乘:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i;

(2)除:(a+bi)/(c+di)=[(ac+bd)+(bc-ad)i]/(c*c+d*d);


  由于在最近的一个项目中需要用到复数表达式的计算,计算的特点是:对于同一个公式需要进行重复多次的计算,每次计算时只需要变换公式中的某些变量的值。于是花了点时间写了个编译型的复数表达式计算器,该计算器的核心思想是对一个字符串编译一次,转换为一个计算序列,计算时不再分析字符串,直接按照计算序列计算。例如:1+2*5,可以转换为类似下面的计算序列:<br><br>1、数值1赋值到临时变量1<br><br>2、数值2赋值到临时变量2<br><br>3、数值5赋值到临时变量3<br><br>4、临时变量2等于临时变量2乘以临时变量5 <br><br>5、临时变量1等于临时变量1加上临时变量2<br><br>6、返回临时变量1<br><br>  这样在多次重复计算是就省去了编译的过程,提高了效率。<br><br>  基于以上思想我编写了这个编译型复数表达式计算器。<br>  该计算器提供了多种复数计算函数,支持变量(变量在表达式中以大写的V开头),支持多行表达式表达式之间用分号";"间隔。例如您可以这样写计算表达式:<br>V0=12+i;<br>V1=V0*V0;<br>log(V1);<br>  计算的结果为4.976734 + 0.166282i。<br>  支持常量e和pi,例如表达式e^pii的计算结果为-1.000000 + 0.000000i。支持的运算符有-(负号)、+、-、*、/、^(幂运算符)、=、(、)、i(虚数定义符);支持的函数有abs, arg, conj, real, imag, norm, exp, log, log10, sqrt, sin, cos, sinh, cosh, tan, tanh<br><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值