题目标题:
- 计算阶乘n!是一件可怕的事情,因为当n并不是很大时,n!将是一个很大的值。例如13! = 6227020800,已经超过了我们常用的unsigned int类型的取值范围。请设计一个程序,使其可以计算100以内的数的阶乘,结果用字符串的形式输出
思路: 此题类此大整数相乘,循环相乘,以字符串的形式输出。。。大整数相乘用的是普通循环方式,不是基于分治的乘法
public class jiecheng4741 { public static String LongMulti(String s1,String s2){ String result=""; int n1=s1.length(),n2=s2.length(); int re[] = new int[n1+n2]; int jin=0; int p=0; int count=re.length-1; for(int i=s2.length()-1;i>=0;i--){ p=count--; for(int j=s1.length()-1;j>=0;j--){ int temp = re[p]+(s2.charAt(i)-'0')*(s1.charAt(j)-'0')+jin; re[p]=temp%10; p--; jin = temp/10; } while(jin!=0){ int temp=re[p]+jin; re[p]=temp%10; p--; jin=temp/10; } } boolean f=true; for(int k=0;k<re.length;k++){ if(f&&re[k]==0) { } else{ f=false; result=result+re[k]; } } return result; } public static String jiecheng(int n){ if(n==0) return "1"; String re="1"; for(int i=1;i<=n;i++){ re=LongMulti(re,i+""); } return re; } public static void main(String[] args) { int n=5; System.out.println(jiecheng(13)); // String s1="999"; // String s2="9899"; // System.out.println(999*9899); // System.out.println(LongMulti(s1,s2)); } }