0
点赞
收藏
分享

微信扫一扫

2018年第九届蓝桥杯JavaB组省赛-第三题:复数幂

Villagers 2022-03-11 阅读 67

前言


文章目录

2018年第九届蓝桥杯JavaB组省赛-第三题:复数幂

🔊题目描述

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

答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i

注意:需要提交的是一个很庞大的复数,不要填写任何多余内容。

🥇代码示例

package E_lanqiao;

import java.math.BigInteger;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        /*
         * 1.复数的相乘,主要难的思考点在一个i*i=-1,而关键的思考点在于:
         * 实部与虚部区分开来进行计算,然后进行相对应的变量代换,就变得很简单。
         * 2.因为是很大的数相乘,所以需要用BigInteger来进行存储,相应地,调用的
         * 方法也是BigIngeter类包装的方法。
         */
        BigInteger aBigInteger = new BigInteger("2");
        BigInteger bBigInteger = new BigInteger("3");
        BigInteger cBigInteger = new BigInteger("2");
        BigInteger dBigInteger = new BigInteger("3");
        String ansString = Mu(aBigInteger, bBigInteger, cBigInteger, dBigInteger);
        System.out.println(ansString);
        scan.close();
    }
    private static String Mu(BigInteger aBigInteger,BigInteger bBigInteger,BigInteger cBigInteger,BigInteger dBigInteger) {
        BigInteger sbBigInteger = new BigInteger("0");
        BigInteger xbBigInteger = new BigInteger("0");
        int N = 123456;
        while(N > 0) {
            sbBigInteger = aBigInteger.multiply(cBigInteger).subtract(bBigInteger.multiply(dBigInteger));
            xbBigInteger = aBigInteger.multiply(dBigInteger).add(bBigInteger.multiply(cBigInteger));
            // 因为实现的是对复数(2+3i)的幂次方乘积,所以将一个复数的实部以及虚部的值进行更换即可。
            cBigInteger = sbBigInteger;
            dBigInteger = xbBigInteger;
            N--;
        }
        return sbBigInteger+""+xbBigInteger+"i";
    }
}

大数操作的用法

BigInteger

操作大整数
在这里插入图片描述

BigDemical

可以指定小数的保留数位
在这里插入图片描述
① 这些大数(包括整数&小数),一般都会以字符串的形式传入。
② BigInteger以及BigDemical都在Math包下。

👏小结

这题重要的是要认识到算出来结果这个整数很庞大,即使用long来存储也会产生溢出的情况,所以要用BigInteger来存储,引申到BigInteger类以及BigDemical类的使用。

举报

相关推荐

0 条评论