第九届蓝桥杯试题3–复数幂
题目:设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。
答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i
注意:需要提交的是一个很庞大的复数,不要填写任何多余内容。
首先,看到这道题,要求的是复数123456次幂,题中提示这个数字很大,所以要考虑用BigInteger,BigInteger的一些方法有:
multiply() 相乘
subtract() 相减
add() 相加
要进行数的正负比较时,可以用compareTo(),例如i.compareTo(j),若i大于j时,返回一个大于0的数,若i小于j时,返回-1。
import java.math.BigInteger;
public class Demo {
public static void main(String[] args) {
BigInteger m=new BigInteger("2");
BigInteger n=new BigInteger("3");
BigInteger i=m,j=n;
BigInteger x;
BigInteger h=new BigInteger("0");
for(int k=1;k<123456;k++) {
x=m.multiply(i).subtract(n.multiply(j)); //x=m*i-n*j
j=m.multiply(j).add(n.multiply(i)); //j=m*j+n*i
i=x;
}
if(j.compareTo(h)!=-1)
System.out.println(i+"+"+j+"i");
else if(j.compareTo(h)==-1)
System.out.println(i+""+j+"i");
}
}
运行结果:
可以复制控制台上的内容,然后粘贴到一个文本文档中,就能查看到结果了。