蓝桥杯 复数幂

该博客介绍了一种使用Java的BigInteger类来计算大整数复数幂的方法,具体是计算(2+3i)^123456。通过复数乘法公式和循环相乘实现,结果存储于文件中,避免了因数值过大无法直接显示的问题。博客内容涉及到大整数运算和IO流的使用。
摘要由CSDN通过智能技术生成

蓝桥杯 复数幂

题目要求:
设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。

正确答案:因为数字过大,导致数字显示不出来,所以需要IO流将数字传入到文件中显示

因为这一次数字过大已经超过了9位数字,甚至可以超过Long类型的范围,所以int long已经满足不了我们的运算,所以我们需要涉及新的概念,BigInteger这个类,首先它不是基本数据类型之一,不能进行简单的加减乘除运算,取而代之,可以用一些方法代替他们,比如add()加法 subtract()减法 mutiply()乘法 divide()除法,其次它其实更像String,是Java里的一个类,然而它的初始化方式却没有String那么方便可以直接赋值,而是跟其他自定义的类一样,要调用它的构造器进行初始化。这个类的取值范围原则上是没有上限的,取决于你的计算机的内存,这也是我们需要用到的地方

分析:

其实整体思路,很简单,只不过就是利用for循环,将复数进行123455次相乘即可,在这里插入图片描述
这是两个复数相乘的公式,等会我们会用到,最后算出结果,利用Io流传送到文件中即可,代码如下:

import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;

public class App_33 {
    //(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
    //(2+3i)*(2+3i)=(2*2-3*3)+(2*3+3*2)i
    public static void main(String[] args) throws IOException {
        BigInteger a = new BigInteger("2");
        BigInteger b = new BigInteger("3");
        BigInteger c = new BigInteger("2");
        BigInteger d = new BigInteger("3");

        BigInteger e = new BigInteger("2");
        for(int i =1;i<=123455;i++){
            e=a;
            //a*c-b*d
            a= a.multiply(c).subtract(b.multiply(d));
            //a*d+b*c
            b= e.multiply(d).add(b.multiply(c));
        }
        //利用IO流,发送到该地址下的文件中
        FileWriter writename = new FileWriter("src/bi.txt");
        //如果b是正数,则需要我们自己添加加号
        //如果b是负数,则它会自动添加负号
        if(b.compareTo(BigInteger.ZERO)>=0){
            writename.write(a+"+"+b+"i");

        }else{

            writename.write(a+""+b+"i");
        }

        writename.flush();
    }
}

最后的结果,博主也不展示了,因为实在是太大了,感兴趣小伙伴可以看一下它到底是几位数,可以自己手动查一下哟

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值