两条有趣的机试试题

原创 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的内容。





java常见机试题目(1)

好久没写博客了,今天重新开始,发现自己学习的知识很糙,就是知道,也能说出来,但是很多知识点不清晰,不深入,所以呢,写个博客总结一些程序,理清概念。 1java中大小写字母转化,在java中存在api...
  • hansongjiang
  • hansongjiang
  • 2016年07月08日 17:47
  • 512

Java基础编程机试题

七道比较基础的java机试题,附有答案。对于初学者还是有点价值的。
  • wenzhi20102321
  • wenzhi20102321
  • 2016年09月04日 10:32
  • 1205

面试ASP.NET程序员的笔试题和机试题

面试 一般会叫你填两个表 1个是你的详细信息表 1个是面试题答卷 两个都要注意反正面是否都有内容不要遗漏,如果考你机试一般也有两种,就是程序连接数据库或一些基本的算法(二分查找,递归等),公司一般都是...
  • vipxiaotian
  • vipxiaotian
  • 2007年07月10日 16:32
  • 939

华为Java机试题

1.程序实现目标: 输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。     程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符。 packag...
  • xcbeyond
  • xcbeyond
  • 2015年05月10日 22:55
  • 21591

考研机试真题(一)之排序

题目1202:排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10071 解决:3549 题目描述:     对输入的n个数进行排序并输出。 输入:    ...
  • u012027907
  • u012027907
  • 2014年09月21日 12:51
  • 1569

2017华为实习机试题(java)

题目1:    编写一个reverseadd函数,实现两个数倒置后再求和的功能,比如输入123,456就是求321+654,输出975    注意输入100,200输出3,(自动去除开头的0),超过范...
  • fengsigaoju
  • fengsigaoju
  • 2017年03月25日 10:07
  • 1980

华为校招JAVA机试题

又到校园招聘的时候了,前几天听同学说华为校招还要考上机,然后就在网上找往年的机试题,找到之后就开始战斗了。。下面的题目都是在网上找的,然后代码是自己一个一个写的。。。 1.程序实现目标: 输入一个字...
  • TaoTaoFu
  • TaoTaoFu
  • 2017年01月09日 22:17
  • 1761

2011年北京大学计算机研究生机试真题(题解)

九度OJ题目传送门:2011年北京大学计算机研究生机试真题鸡兔同笼题目描述一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多...
  • violet_echo_0908
  • violet_echo_0908
  • 2016年04月25日 20:05
  • 808

2012华为机试题目(C/C++)

1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表...
  • xiaofei2010
  • xiaofei2010
  • 2013年08月02日 18:16
  • 5495

西安中软国际机试题

1. 数列求和 编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。 1+1/2!+ .... +1/n! 输出保留5位小数...
  • sxb0841901116
  • sxb0841901116
  • 2014年03月03日 23:50
  • 4009
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两条有趣的机试试题
举报原因:
原因补充:

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