【每日蓝桥】54、一八年省赛Java组真题“复数幂”

你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

标题:复数幂

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

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

答案写成"实部土虚部i"的形式,实部和虚部都是整数(不能用科学计数法表示),中间任

何地方都不加空格,实部为正时前面不加正号. (2+3i)^2 写成: -5+12i,

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

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

解题思路:

本题在求解的时候用到了我们初中数学中所讲的虚数和实数的概念,刚开始看到这道题的时候我也是有点懵,不知道让求什么东西该怎么下手,但是给你看一下有关虚数的概念你应该就懂了:

实部与虚部是数学名词“复数”中的一个概念,把形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。同时在虚数中i^2=-1

看了这个概念我相信你应该会了解了吧,所以这一道题其实就是对2+3i求123456次方,然后得出实部和虚部,但是题目中也说了所求的数目会非常的巨大,因此这里需要用到一个表示巨型数据的类BigInteger,这个类我认为才是本题考查的重点。有关这个类的具体使用可以查看相关API,在这里我只和大家介绍一下其中常用的方法:

add(BigInteger val)
          返回其值为 (this + val) 的 BigInteger。

subtract(BigInteger val)
          返回其值为 (this - val) 的 BigInteger。

multiply(BigInteger val)
          返回其值为 (this * val) 的 BigInteger。

divide(BigInteger val)
          返回其值为 (this / val) 的 BigInteger。

compareTo(BigInteger val)
          将此 BigInteger 与指定的 BigInteger 进行比较小于就返回-1,大于就返回1

现在就可以根据以上的BigInteger类来对题目进行求解了,由于题解答案非常大,所以将答案输出到了文件中,

答案源码:

package 一八年省赛真题;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.math.BigInteger;

public class Year2018_Bt3 {

	public static void main(String[] args) throws FileNotFoundException {
		BigInteger two = BigInteger.valueOf(2);
		BigInteger three = BigInteger.valueOf(3);
		
		BigInteger a = BigInteger.valueOf(2);
		BigInteger b = BigInteger.valueOf(3);
		
		BigInteger aa = null;
		BigInteger bb = null;
		//(two+three*i)*(a+b*i) = (two*a-three*b) + (three*a+two*b)*i
		//所以相乘之后得到的a是(two*a-three*b),b是(three*a+two*b)
		for (int i = 0; i < 123455; i++) {
			aa = a.multiply(two).subtract(three.multiply(b));
			bb = a.multiply(three).add(two.multiply(b));
			//将这一次乘积得到的a和b赋值给下一个乘积的a和b
			a = aa;
			b = bb;
		}
		
		System.setOut(new PrintStream(new File("ab.txt")));	//由于数据过大,将数据输出到文件
		System.out.println(aa + (bb.compareTo(BigInteger.ZERO)<0?"-":"+") + bb + "i");
	}

}

输出样例:

【每日蓝桥】54、一八年省赛Java组真题“复数幂”_第1张图片

 

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

【每日蓝桥】54、一八年省赛Java组真题“复数幂”_第2张图片

你可能感兴趣的:(每日蓝桥,数据结构,java,编程语言,蓝桥杯,BigIneger)