蓝桥杯第九届 java 复数冥

标题:复数幂
设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。
答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i

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

思路:首先这题要知道一个公式

(a+bi)*(c+di) = ac + adi + cbi + bdi^2 = (ac-bd) + adi + cbi 即i的平方变成-1 按照复数冥的公式得出只有i的式子

(2-3i)^2 = 4 - 9 + 2(2x3xi) = -5 * 12i 这也是为什么题目会得出这样的数的原因

使用long就可以做出来,使用bigInteger会有正负号判断,过于繁琐

下面就是通过得出的long3 + long4i 再与原来的(2 + 3i)无限运算得出最终答案

long3为答案实部 而long4为虚部
答案 4043220979119144065-7374402350132176768i
#### 可以用excel做哦这题 比如在B2输入(2+3*i) 在B3插入power函数,(B2 ,123456 ) 然后B3就会得到答案


public class Solution {
    public static void main(String[] args) {


    Scanner scanner = new Scanner(System.in);

    Long long1 = Long.valueOf(2);

    Long long2 = Long.valueOf(3);

    Long long3 = Long.valueOf(2);

    Long long4 = Long.valueOf(3);

    Long real = Long.valueOf(1);

        for (int i = 2; i < 123457; i++) {
        //实部
        real = long1*long3;
        //i
        Long fake1 = long1*long4;
        //i
        Long fake2 = long2*long3;
        //i^2
        Long fake3 = long2*long4;

        long3 = real - fake3;

        //(a+bi)*(c+di) = ac + adi + cbi + bdi^2 = (ac-bd) + adi + cbi  即i的平方变成-1 按照复数冥的公式得出只有i的式子
            // (2-3i)^2 = 4 - 9 + 2(2*3*i) = -5 * 12i
            long4 = fake1 + fake2;
        }

            System.out.print(long3);

        if (long4<0)
            System.out.print(long4+"i");
        else
            System.out.print("+"+long4+"i");
}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值