黑马程序员技术交流社区

标题: 1000的阶乘所有零和尾部零的个数,不用递归做 [打印本页]

作者: javaeea    时间: 2015-9-30 19:25
标题: 1000的阶乘所有零和尾部零的个数,不用递归做
/**
         * @param args
         *  需求:求出1000的阶乘所有零和尾部零的个数,不用递归做
         */public static void multiply(){
                //int multiply = 1;
                BigInteger multiply = new BigInteger("1");
                for(int i=1;i<=1000;i++){
                        multiply = multiply.multiply(new BigInteger(i+""));
                }
                System.out.println(multiply);
                String str = multiply.toString();
                StringBuilder sb = new StringBuilder(str);
                str = sb.reverse().toString();
                int count = 0;
                for(int i=0;i<str.length();i++){
                        if('0'==str.charAt(i)){
                                count++;
                                }else{
                                        break;
                        }
                }
                System.out.println(count);
        }
作者: 朦胧色彩    时间: 2015-9-30 20:14
  1. class Test
  2. {
  3.     public static void main(String[] args)
  4.     {

  5.         //求1000!,就是1*2*3*4*5*....*1000

  6.         int[] arr = new int[1000000];// 存储1000!的结果,我想1000000位足够了吧
  7.         arr[1] = 1;
  8.         int numindex = 1;// 求出来值的是多少位数

  9.         for(int i = 1; i <= 1000; i++)
  10.         {
  11.             for(int j = 1; j <= numindex; j++)
  12.                 arr[j] *= i;
  13.             
  14.             // 判断每一位是不是大于等于10,是的话往前就进1
  15.             for(int k = 1; k < numindex; k++)
  16.                 if(arr[k] >= 10)
  17.                 {
  18.                     arr[k+1] += arr[k] / 10;
  19.                     arr[k] %= 10;
  20.                 }

  21.             // 最高位也不得>=10
  22.             while(arr[numindex] >= 10)
  23.             {
  24.                 arr[numindex + 1] += arr[numindex] / 10;
  25.                 arr[numindex] %= 10;
  26.                 numindex++;
  27.             }
  28.         }

  29.         int counts = 0;
  30.         // 从最高位往后打,判断如果是0就+1
  31.         for (int k = numindex; k >= 1; k--) {
  32.             if(arr[k]==0)
  33.                 counts++;
  34.         }
  35.         System.out.println("一共有:"+counts+"个零");

  36.                 int tail = 0;
  37.                 for(int k = 1; k <= numindex; k++)
  38.                 {
  39.                         if(arr[k]==0)
  40.                                 tail++;
  41.                         else
  42.                                 break;
  43.                 }
  44.                 System.out.println("尾部有:"+tail+"个零");

  45.     }
  46. }
复制代码

作者: javaeea    时间: 2015-10-1 10:15
朦胧色彩 发表于 2015-9-30 20:14

6666666666666666666666





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2