第九届蓝桥杯试题解析 3. 复数幂

题目

设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。

求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。

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

(2+3i)^5 的写成: 122-597i

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

思路

1. 复数的幂运算法则: (a+bi) * (c+di) = (ac-bd) + (ac+bd)i

2. 写一个复数类, 用来记录每次运算后的结果

//由于结果数字过大所以程序中我们一律使用BigInteger来保存运算结果

class Nums {

        private BigInteger s;

        private BigInteger x;

        public Nums(int a, int b) {

            s = BigInteger.valueOf(a);

            x = BigInteger.valueOf(b);

        }

    }

3. 写一个相乘方法, 用来计算幂运算

public static Nums multiNums(Nums n1, Nums n2) {

        BigInteger s;

        BigInteger x;

        s = n1.s.multiply(n2.s).subtract(n1.x.multiply(n2.x));

        x = n1.s.multiply(n2.x).add(n1.x.multiply(n2.s));

        n1.s = s;

        n1.x = x;

        return n1;

    }


4. main方法中使用循环计算得到结果即可

public static void main(String[] args) {

        Nums nums = new Nums(2, 3);

        Nums re = new Nums(2, 3);

        for (int i = 1; i < 123456; i++) {

           nums = multiNums(nums, re);

        }

        System.out.println(nums.s + "+" + nums.x + "i");

}


结果

由于结果太大, 我...  

你可能感兴趣的:(第九届蓝桥杯试题解析 3. 复数幂)