华为机试 可怕的N阶乘

题目标题:

  • 计算阶乘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));
    }

}

 

posted on 2016-04-01 16:32  todayjust  阅读(299)  评论(0编辑  收藏  举报

导航