思路:首先开辟一个数组,用来存储结果,用一个变量来记录结果的位数(len)。然后调用fun函数(这里我随便写的,哈哈哈),传入结果数组,位数,和乘数。最后把结果数组逆向输出,因为存入的时候都是低位在前,高位在后,所以要逆向输出。直接上代码(刚刚学习Java,若有不足,谢谢您给提出来,>_<):
import java.util.Scanner;
/**
* Main
*
* @author 小朝
* @date 2020/3/2
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int [] result = new int [100000];
// 结果初始为1
result[0] = 1;
// 初始长度
int len = 1;
for(int i = 2;i<=n;i++){
len = fun(result,len,i);
}
for(int i = len-1 ;i>=0;i--){
System.out.print(result[i]);
}
}
public static int fun(int [] a, int len,int m){
// 记录进位值
int rem = 0;
for(int i=0;i<len;i++){
rem += a[i] *m;
a[i] = rem%10;
rem = rem/10;
}
if(rem>0){
/* 这里很关键(就在这我调试半天,才发现这个问题),
因为随着后面越乘越大,进位的rem可能不止一位,
比如112,265等等的数字,所以我用字符串切分的方法
来一个一个地加入到结果数组中,
也要注意,这里是逆序存储,比如“112”,则
strs[2]应该是第一个存入结果数组。
*/
String[] strs = Integer.toString(rem).split("");
for(int i=strs.length-1;i>-1;i--){
a[len++] = Integer.parseInt(strs[i]);
}
}
return len;
}
}