

import java.io.IOException;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
//数学
/*
* M=N^N.
* log(M)=log(N^N)=N*log(N)
* 10^log10(M)=M=10^(N*log10(N))=10^N * 10^log10(N)
* 令N*log(N)=a+b. a为整数部分,b为小数部分。
* 由于10的任何整数次幂首位一定为1.所以M的首位指和N*log(N)的小数部分有关。即只求10^b就可以了。
* 然后输出整数部分。
*/
public static void main(String[] args) throws IOException {
Scanner in=new Scanner(System.in);
int n;
int t=in.nextInt();
while(t-->0) {
n=in.nextInt();
double a=n*Math.log10(n);
double k=a-(long)a;
System.out.println((int)Math.pow(10, k));
}
}
}
/*
2
3
4
2
2
*/
本文介绍了一种使用Java编程语言计算形式为M=N^N的大数首位数字的方法。通过将问题转化为计算N*log(N)的小数部分对应的10的幂次,巧妙地解决了直接计算大数可能导致的溢出问题。程序使用了Math类中的log10和pow函数,并通过Scanner类读取输入。

426

被折叠的 条评论
为什么被折叠?



