- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * 输入一个数,求它的阶乘后面有多少个连续的0,将其连续0 的个数输出。
- 例如所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是x,x就是n的阶乘。
- 分析:阶乘容易求出,将阶乘转成字符串,判断尾部是否有0.
- 设置一个正则表达式,将其取出即可
- * @author Administrator
- *
- */
- public class JieCheng {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- getEndZero(20);
- }
- public static void getEndZero(int x ){
- int b = 1;
- //long b = 1; 没测试过
- for(int a=1;a<=x;a++){
- b = b*a;
- }
- //b这里定义的int类型,貌似给的数过大的话
- //其阶乘就超出int的取值范围,b就为负数了,考虑用long类型
- //x的值超过16就为负数了
- System.out.println("阶乘:"+b);
- String str = b+"";
- //System.out.println(str);
- String reg = "0+$";
- if(str.endsWith("0")){
- Pattern p = Pattern.compile(reg);
- Matcher m = p.matcher(str);
- while(m.find()){
- System.out.println(m.group());
- System.out.println("后面0的个数:"+(m.end()-m.start()));
- }
- }else{
- System.out.println(-1);
- }
- }
- }
复制代码
看看这个代码可行不? |