题目:计算(2+3i)的123456次方
大概思路:123456次方用int类型肯定是不行的,会超出数据范围,所以要报哪个BigInteger,首先先用一个很小的数据找出大概的思路,(a+bi)(c+di)=ac-b*d+(adi+bci),然后在考虑输出,因为eclipse输出框是有限长度的,所以可以在外部生成一个txt存储。
代码如下:
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Scanner;
public class B复数幂 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
//int n = sc.nextInt();测试
BigInteger x = new BigInteger("2");
BigInteger y = new BigInteger("3");
BigInteger a = new BigInteger("2");//实部
BigInteger b = new BigInteger("3");//虚部
for(int i=1;i<123456;i++) {
//计算实部
BigInteger a1 = a;//记录实部,避免虚部的计算不正确
a=a.multiply(x).subtract(b.multiply(y));
//计算虚部
b=a1.multiply(y).add(b.multiply(x));
}
FileWriter writename= new FileWriter("src/*****/bi.txt", true);
if(b.compareTo(BigInteger.ZERO)>0) {
//输出的时候要特别注意,因为虚部是正数的时候,+号不显示,所以要判断一下,而且大数比较不能直接与0比较,因为会默认为与int类型的0比较,会报错
writename.write(a.toString()+"+"+b.toString()+"i");
}else { writename.write(a.toString()+b.toString()+"i");
}
writename.flush();
}
}
*最后附上大数常用方法
BigInteger Bi//大整数
Bi.abs();//取绝对值
Bi.add(val);//加法
Bi.subtract(val);//减法
Bi.multiply(val);//乘法
Bi.divide(val);//除法
Bi.compareTo(val);//比较大小
Bi.pow(exponent);//次幂
Bi.bitCount();//转成二进制中1的个数
Bi.bitLength();//转成二进制的长度
Bi.gcd(val);//最大公约数
Bi.max(val);//最大值
Bi.min(val);//最小值
Bi.mod(m);//取模
Bi.toString(radix);//以radix进制输出
Bi.valueOf(val);//将val赋值给bi