蓝桥杯第九届JavaB组---复数幂

(这道题的答案太长了,eclipse的控制台输出不了完整的答案,idea可以,所以蓝桥杯比赛时就只能听天由命,毕竟你也不知道答案到底有多长)

这题还有一个注意的点就是题目给你说了答案是一个很庞大的数,在蓝桥杯题中你只要看到这种信息提示,包括一些很大的阶乘,就要用BigInteger这个类。

题目:

这道题在于如何处理复数,

我们知道(a+bi)(c+di)=ac-bd+(ad+bc)i,于是我们可以令a=ac-bd,b=ad+bc,那么第二次的

(a+bi)(c+di)=[(ac-bd)+(ad+bc)i](c+di)=ac^2-bdc+(adc+bcc)i+(ad+bc)i*di+di*(ac-bd)=(acc-bdc-add-bcd)+(acd-bdd+adc+bcc)i,此时a=(acc-bdc-add-bcd),b=(acd-bdd+adc+bcc)i......

那么,我们可以以此为思路,用一个for循环,不断求出新的a和b!

BigInteger a=BigInteger.valueOf(2);
BigInteger b=BigInteger.valueOf(3);
BigInteger c=BigInteger.valueOf(2);
BigInteger d=BigInteger.valueOf(3);
//这里i<123456,不是i<=123456,
 // 你可以想若是计算3^3,i=1,那i<3,i=1时;result=3*3,i=2时,result=3*3*3
for(int i=1;i<123456;i++){
    //写下面的式子时,我们要记住a=ac-bd,b=ad+bc
    //subtract是BigInteger中的减法,add是加法,multiply是乘法
     BigInteger a1=a.multiply(c).subtract(b.multiply(d));
     BigInteger b1=a.multiply(d).add(b.multiply(c));
     a=a1;
     b=b1;
}
//下面这行代码的解释见代码下面
String sign=b.compareTo(BigInteger.ZERO)>0?"+":"";
 System.out.println(a+sign+b+"i");

下图是用idea输出的结果,很大,让人无语

还有很多,实在不想弄了......

下面是对String sign=b.compareTo(BigInteger.ZERO)>0?"+":"";的解释:

在Java中,compareTo 方法用于比较两个 BigInteger 对象的大小。这个方法返回一个整数,其含义如下:

  • b.compareTo(BigInteger.ZERO)比较的是b和BigInteger.ZERO,这里的BigInteger.ZERO代表的是数字0
  • 如果两者相等,则返回0;如果b>BigInteger.ZERO,则返回一个任意大于0的正整数;如果b<a,则返回一个负整数。
  • 至于这个三元运算符我就不过多解释了

如果各位觉得写得还勉强,就给我点一个赞,您的点赞就是我坚持下去的动力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值