本帖最后由 白春秋 于 2015-3-14 22:18 编辑
遍历1到1000,首先筛选出能除以10的数,记录总个数,否则遍历除以5的个数,关键就是除以10的说句有可能多个0的情况,之前也遇到过这个问题自己写的代码如下/**
*
*/
package com.itheima;
/**
* 9、 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
*
* 思路: 要知道1000! 第一步 中有多少个0只需要判断1到1000的所有数据末尾0的数量和尾数为5的数的数量即可 2,for循环遍历1到1000
* 3,把遍历到的数据转成字符串 4,判断末尾0的个数和末尾是5的个数
*/
public class Text9 {
public static void main(String[] args) {
func1(1000);
}
// 定义一个静态方法:完成计算统计x!末尾0的个数
public static void func1(long l) {
// 定义变量分别记录末尾是0末尾是5和结果末尾0的个数
int sum_0 = 0;
int sum_5 = 0;
int sum = 0;
for (int i = 1; i <= l; i++) {
// 将基本数据类型转成String
String str = String.valueOf(i);
// 先判断能被5整除的数,即末尾是0或者5
if (i % 5 == 0) {
// 再判断不能被10整除,即选择末尾是5,末尾是5的数乘以偶数就可使积的末尾增加一个0,而连续数据末尾是5的个数比偶数的个数要少,因此有一个末尾是5的数据,最终积就增加一个0
if (i % 10 != 0) {
sum_5 = sum_5 + 1;
} else {
// 末尾0的个数:以最后一个0所在的索引为endindex截取子串,每截取一次sum_0加1
for (int j = 0; str.lastIndexOf("0") == (str.length() - 1); j++) {
str = str.substring(0, str.lastIndexOf("0"));
sum_0 = sum_0 + 1;
}
}
}
}
sum = sum_0 + sum_5;
System.out.println(sum_0);
System.out.println(sum_5);
System.out.println(l + "!中有" + sum + "个0");
}
}
|