两条有趣的机试试题

原创 2015年04月18日 14:08:31


题目一:求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的内容。





相关文章推荐

来自苹果、谷歌、微软等知名公司六道有趣智力面试题,试试吧

NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条...

来自苹果、谷歌、微软等知名公司六道有趣智力面试题,试试吧!

NO.1 有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 NO.2 有个8×8棋盘,其中对角的...

算法题 1 判断两条单链表是否交叉 一百度实习笔试题(2012.5.6)

题意:     算法题1 一个url指向的页面里面有另一个url,最终有一个url指向之前出现过的url或空,这两种情形都定义为null。这样构成一个单链表。给两条这样单链表,判断里面是否存在同样...

【Codeforces Round 336 (Div 2) E】【KMP 构造 脑洞 好题 模拟找规律】Marbles 两条路径同时出发前后行走能否恰好同时到终点

E. Marbles time limit per test 2 seconds memory limit per test 256 megabytes input ...

一个有趣的心理测试,大家一起来试试(zt).

心理测验来自西方,是与人潜意识有关。我10多年前认识个朋友,从国外读书回来,给我说了个心理测验《借船过河》,她说是读心理学时老师教的。然后 我拿这个测验测过无数人,都很准。这个也不是算命,但可以让你了...
  • ygy5207
  • ygy5207
  • 2011年07月11日 17:26
  • 144

一道有趣的题

  • 2013年07月10日 18:25
  • 2KB
  • 下载

【OI做题记录】【BZOJ】有趣的家庭菜园

试题编号:BZOJ4240 对家庭菜园有兴趣的JOI君每年在自家的田地中种植一种叫做IOI草的植物。JOI君的田地沿东西方向被划分为N个区域,由西到东标号为1~N。IOI...

12个有趣的C语言面试题

http://www.csdn.net/article/2012-09-06/2809604-12-c-interview-questions     摘要:12个C语言面试题,涉及指针、进...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两条有趣的机试试题
举报原因:
原因补充:

(最多只允许输入30个字)