2020-8/18 大数运算之复数幂

题目:计算(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

猜你喜欢

转载自blog.csdn.net/weixin_45956597/article/details/108092332