求1000以内的阶乘
编程思想:将每一位十进制使用一个数组元素装起来,然后慢慢阶乘进位
数组方式
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
input.close();
int arr[][]=new int [10000][2];
//1000以内阶乘的话一万长度是够了的,如果数据在大,再次长扩大数组长度即可
arr[0][0]=1;
int len=1;
for(int i=2;i<=n;i++) {
for(int j=0;j<len;j++) {
arr[j][0]*=i;
if(arr[j][0]>=10) {
arr[j][1]+=arr[j][0]/10;
arr[j][0]=arr[j][0]%10;
}
}
for(int j=1;j<=len;j++) {
if(arr[j-1][1]>0) {
arr[j][0]+=arr[j-1][1];
arr[j-1][1]=0;
if(j==len)len++;
}
if(arr[j][0]>=10) {
arr[j][1]+=arr[j][0]/10;
arr[j][0]=arr[j][0]%10;
}
}
}
//因为位数分布是这样的:个、十、百、千、万...所以从后面输出
boolean flage=false;
for(int i=len-1;i>=0;i--) {
if(arr[i][0]!=0)flage=true;
if(flage) {
System.out.print(arr[i][0]);
}
}
}
}
BigInteger方式
import java.math.*;
import java.util.Scanner;
public class Main {
public static void main (String []args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
input.close();
BigInteger bigsum=new BigInteger("1");
for(int i=1;i<=n;i++) {
BigInteger bignum=new BigInteger(String.valueOf(i));
bigsum=bigsum.multiply(bignum);
}
System.out.println(bigsum);
}
}