n的阶乘溢出问题处理

  public static void factorial(int n) {
        //传入阶乘的数字n
        //创建保存结果的数组array
        int[] array=new int[100];
        array[0]=1;
        //位数bit
        int bit=1;
        //进位carry
        int carry=0;       
        for(int i = 2;i <= n; i++) {
            //从2的阶乘开始计算,算到n
            for(int j = 0; j < bit; j++) {
                array[j] = array[j] * i;
            }
            for(int j = 0; j < bit-1; j++) {
                //进位数
                carry = array[j]/10;
                //每个数组元素都只留下个位数
                array[j] %= 10;
                //上一位加上进位的结果
                array[j+1] += carry;
            }
            //如果最高位大于等于10,那么需要再进一位
            if(array[bit-1] >= 10) {
                int temp = array[bit-1] / 10;
                array[bit-1] %= 10;
                //一直进位直到进位数为0
                while(temp != 0) {
                    array[bit] = temp % 10;
                    temp /= 10;
                    bit++;
                }
            }
        }
        for(int m = bit - 1; m >= 0; m--) {
            System.out.print(array[m]);
        }    
    }

 

posted on 2020-11-14 16:13  BestCoding  阅读(361)  评论(0编辑  收藏  举报