(这道题的答案太长了,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,则返回一个负整数。
- 至于这个三元运算符我就不过多解释了
如果各位觉得写得还勉强,就给我点一个赞,您的点赞就是我坚持下去的动力