【题目】
设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。
答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。
(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i
注意: 需要提交的是一个很庞大的复数,不要填写任何多余内容。
在写这道题时,我们必须要认真,认真,认真 读题,注意这个要注意
的地方,提交的是一个很庞大的复数。本来我认为long
型的就行了,结果long
型的完全不够用,结果确实让人有点无语,看来我还是太天真。
咱们首先看一下用long
计算得到的结果
【代码】(这是个用long示例的代码)
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
// //定义一个实部,定义一个虚部
long shi=2;
long xu=3;
//实部为每次实部*2-虚部*3
//虚部为实部*3+虚部*2
Scanner scanner=new Scanner(System.in);
int parm=scanner.nextInt();
for (int i = 1; i < parm; i++) {
long shiRes=shi*2-xu*3;
xu=shi*3+xu*2;
shi=shiRes;
}
System.out.println(shi+" "+(xu<0?"":"+")+xu+"i");
}
}
答案为:4043220979119144065 -7374402350132176768i
是不感觉挺大的?no no no 这是因为long型的最大范围就是这,不能在超了,这对于大数据来说是很小的一个数
我们在来看正确的数据
【代码】
package 第九届蓝桥杯省赛javaB组.java;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws FileNotFoundException {
BigInteger shi= BigInteger.valueOf(2);
BigInteger xu= BigInteger.valueOf(3);
BigInteger two=BigInteger.valueOf(2);
BigInteger three=BigInteger.valueOf(3);
BigInteger shiRes=null;
BigInteger xuResxu=null;
Scanner scanner=new Scanner(System.in);
int parm=scanner.nextInt();
for (int i = 1; i < parm; i++) {
shiRes=shi.multiply(two).subtract(xu.multiply(three));
xuResxu=shi.multiply(three).add(xu.multiply(two));
shi=shiRes;
xu=xuResxu;
}
System.setOut(new PrintStream(new File("E:\\out3.txt")));
System.out.println(shiRes+""+(xuResxu.compareTo(BigInteger.ZERO)<0?"":"+")+xuResxu+"i");
}
}
因为 java 里面有封装的bigInteger,所以直接调用,然后看下api就行
答案:
这只是一部分…
所以,真的是没法比较,然后13分就没了
这道题主要是考大数据问题,所以,在以后做题的时候,切记要,读题读题在读题!!!