黑马程序员技术交流社区

标题: 各位大神来个解题思路 [打印本页]

作者: Orangeapp    时间: 2015-9-27 22:39
标题: 各位大神来个解题思路
求1000!的结果中包含多少个0      1000! = 1×2×3×4×5×...×999×1000
各位大神来个解题的思路呗!!!
作者: Orangeapp    时间: 2015-9-27 22:41
没有想明白
作者: maxwell247    时间: 2015-9-28 00:30
请善用搜索  http://bbs.itheima.com/thread-109057-1-1.html
作者: 朦胧色彩    时间: 2015-9-28 11:44
本帖最后由 朦胧色彩 于 2015-9-28 12:15 编辑

用数组来保存结果
  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.     }
  37. }
复制代码

作者: Synaric    时间: 2015-9-28 11:51
我的想法是遍历1-1000,找到被2、5整除的数
作者: 插兜    时间: 2015-9-28 13:15
感叹号不是非的意思吗




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