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

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

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

  • 写回答

2条回答 默认 最新

  • 当作看不见 2016-10-12 06: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 宝塔面板一键迁移使用不了
  • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
  • ¥15 如何单独修改下列canvas推箱子代码target参数?,插入图片代替其形状,就是哪个绿色的圆圈每关用插入的图片替代
  • ¥20 四叉树的创建和输出问题
  • ¥15 javaweb连接数据库,jsp文件加载不出来
  • ¥15 matlab关于高斯赛德尔迭代的应用编撰。(相关搜索:matlab代码|迭代法)
  • ¥15 损失匹配问题,求解答
  • ¥15 3500常用汉字书法体检测数据集下载
  • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
  • ¥15 Qt音乐播放器的音乐文件相对路径怎么写