• 华为机试 可怕的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));
        }
    
    }
  • 相关阅读:
    (原创)如何利用UDP协议封装一个数据包
    <acarousel> 轮播图片无法触屏滑动
    Groovy开发语言
    关于ViewStub标签
    关键字transient和Volatile
    Android中Activity启动模式
    Android 开源项目分类汇总
    AtomicInteger的并发处理
    Cygwin: died waiting for dll loading (转载)
    Android知识点(C2DM)
  • 原文地址:https://www.cnblogs.com/todayjust/p/5345374.html
Copyright © 2020-2023  润新知