两条有趣的机试试题



题目一:求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000

题目二:用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?




解答:

第一题思路:可以使用java.math.BigInteger来计算一个大数,把最后结果转成字符串,再用正则表达式对里面的‘0’字符进行统计便可。


import java.math.BigInteger;
import java.util.regex.*;           //计算1000!的结果中有多少个0

public class Test1000 {
        public static void main(String ars[]) {
                Test1000 test = new Test1000();
                test.multiply(1000);        //用面向对象的方法
        }
        public void multiply(int n) {
                BigInteger sum = new BigInteger("1");          // //创建一个大数对象
               
                for (int i = 1; i <= n; i++) {                            //循环计算结果
                        BigInteger num = new BigInteger(String.valueOf(i));//这里面只能接收string型
                        sum = sum.multiply(num); 
                }
                

                String str = sum.toString();         //将结果转成字符串

                int zeroNum = zeroCount(str);      //调用方法,计算结果含有多少个0
               
                System.out.println("长度:"+str.length());
                System.out.println(n + "阶乘结果为:" + "\n" + str);
                System.out.println(n + "阶乘中0的个数:" + zeroNum);
        }


        public int zeroCount(String str) {
                int count = 0;
                String r = "0";
                Pattern p = Pattern.compile(r);
                Matcher m = p.matcher(str);
                while (m.find()) {
                        count++;
                }
                return count;
        }

}



   第二题思路:这题之前还真没考虑过,感觉有点意思,其实也很简单,使用最常用的的测试方法“打印输出”就可以验证先后的顺序了。



public class TestReturn_Finally {
public static void main(String[] args){
System.out.println(test());
}

public static int test(){
try{
System.out.println("我在try里面");
return 1;
}
finally{
System.out.println("我在finally里面");
return 2;
}
}
}



输出结果是:

我在try里面
我在finally里面
2

如果注销掉finally里面的return 2;,输出结果则是:

我在try里面
我在finally里面
1


结论:try---catch----finally的时候,finally无论如何都要被执行,而且是在执行完finally后才返回try里面的return,如果finally里面也有return,则很不幸,try里面的会被覆盖掉,只返回finally语块里面return的内容。





阅读更多
文章标签: JAVA 阶乘
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭