Indexeon 2016-10-12 13:48 采纳率: 33.3%
浏览 952
已采纳

用Java语言怎么求出2888!指定位数数字??

用循环语句系统老是报错说是找不到变量.....
String这个东西要怎么用呢??
用biginteger需要转换数据类型吗??

  • 写回答

2条回答 默认 最新

  • 当作看不见 2016-10-12 14:15
    关注

    不给好评都过意不去了

    public class test   
    {  
        /** 
         * 计算进位 
         * @param bit    数组 
         * @param pos 用于判断是否是数组的最高位 
         */  
        private void carry(int[] bit, int pos)  
        {  
            int i ,carray = 0;  
            for(i = 0 ; i<= pos ;i++)//从0到pos逐位检查是否需要进位  
            {  
                bit[i] += carray;//累加进位  
                if(bit[i] <= 9)   //小于9不进位  
                {  
                    carray = 0;  
                }  
                else if(bit[i] >9 && i<pos)//大于9,但不是最高位  
                {  
                    carray = bit[i]/10;//保存进位值  
                    bit[i] = bit[i]%10;//得到该位的一位数  
                }  
                else if(bit[i] > 9 && i >= pos)//大于9,且是最高位  
                {  
                    while(bit[i] > 9)//循环向前进位  
                    {  
                        carray = bit[i]/10;//计算进位值  
                        bit[i] = bit[i] % 10;//当前的第一位数  
                        i ++ ;  
                        bit[i] = carray;//在下一位保存进位值  
                    }  
                }  
            }  
        }  
    
        /** 
         * 大整数阶乘 
         * @param bigInteger 所计算的大整数 
         */  
        private  void bigFactorial(int bigInteger)  
        {  
            int pos =0;//  
            int digit;//数据长度  
            int a , b ;  
            int m = 0 ;//统计输出位数  
            int n  = 0 ;//统计输出行数  
            double sum = 0;//阶乘位数  
            for(a = 1 ; a <= bigInteger ; a ++)//计算阶乘位数  
            {  
                sum += Math.log10(a);  
            }  
            digit = (int)sum + 1;//数据长度  
    
            int[] fact = new int[digit];//初始化一个数组   
            fact[0]  = 1;//设个位为 1  
    
            for(a = 2 ; a <= bigInteger ; a++ )//将2^bigInteger逐个与原来的积相乘  
            {  
                for(b = digit-1 ; b >= 0 ; b--)//查找最高位{}   
                {     
                    if( fact[b]  !=  0 )  
                    {  
                        pos = b ;//记录最高位  
                        break;  
                    }  
                }   
    
                for(b = 0; b <= pos ; b++)  
                {  
                    fact[b] *= a ;//每一位与i乘  
                }  
                carry(fact,pos);  
            }  
    
            for(b = digit-1 ; b >= 0 ; b --)  
            {  
                if(fact[b] != 0)  
                {  
                    pos = b ;//记录最高位   
                    break;  
                }  
            }  
            System.out.println(bigInteger +"阶乘结果为:");  
            for(a = pos ; a >= 0 ; a --)//输出计算结果  
            {  
                System.out.print(fact[a]);  
                m++;  
                if(m % 5 == 0)  
                {  
                    System.out.print(" ");  
                }  
                if(40 == m )  
                {  
                    System.out.println("");  
                    m = 0 ;   
                    n ++;  
                    if(10 == n )  
                    {  
                        System.out.print("\n");  
                        n = 0;  
                    }  
                }  
            }  
            System.out.println("\n"+"阶乘共有: "+(pos+1)+" 位");  
    
        }  
    
        public void doBigFactorial(int bigInteger)  
        {  
            int timeBegin=(int) System.currentTimeMillis();  
            this.bigFactorial(bigInteger);  
            int timeFinishi=(int) System.currentTimeMillis();  
            int time = timeFinishi-timeBegin;  
            System.out.println("计算耗时: " + time +"毫秒" );  
        }  
    
        public static void main(String[] args)  
        {  
            test bi = new test();  
            bi.doBigFactorial(2888);  
        }  
    }  
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用