一道java算法题分析
2014-01-03 16:47
127 查看
最近在面试中遇到这样的一道算法题:
求100!的结果的各位数之和为多少?
如:5!=5*4*3*2*1=120,那么他们的和为1+2+0=3
这道题不算难,不过倒是注意的细节也有一些:
1.数据的越界问题
如果求的是171的阶乘的话,就会超出double类型的存储范围,这时候就要处理了,不然得到的结果是:Infinity
1.可以通过java的BigInteger类来进行处理;
2.可以将结果中的每一位数存在一个int类型的数组中,不过这个方法还没有想出来
代码如下:
求100!的结果的各位数之和为多少?
如:5!=5*4*3*2*1=120,那么他们的和为1+2+0=3
这道题不算难,不过倒是注意的细节也有一些:
1.数据的越界问题
如果求的是171的阶乘的话,就会超出double类型的存储范围,这时候就要处理了,不然得到的结果是:Infinity
1.可以通过java的BigInteger类来进行处理;
2.可以将结果中的每一位数存在一个int类型的数组中,不过这个方法还没有想出来
代码如下:
package com.fire.test; public class Test { public static void main(String args[]) { double res = getFactorial(100); int sum = getSum(res); System.out.println(sum); } /** * 求一个数的阶乘(递归) * @param num * 当num为171时会超出double类型的存储范围 */ private static double getFactorial(int num) { double res = 0; if (num == 1) { return 1; } else { res = num * getFactorial(num - 1); } return res; } /** * 求出每位数的和 * @param res * @return */ private static int getSum(double res) { int sum = 0; while (res > 0) { sum += res % 10; res /= 10; } return sum; } /** * 通过字符串截取的方式获得各位数的和(通过截取字符串的方式来求) * @param res * @return * http://www.cnblogs.com/sosoft/ */ private static int getSum1(double res) { int sum = 0; String resStr = String.valueOf(res); for (int i = 0; i < resStr.length(); i++) { // 一个char类型的数据减去'0'可以得到对应的int类型 sum += resStr.charAt(i) - '0'; } return sum; } }
相关文章推荐
- 一道程序的分析
- 一道google笔试题的简单分析
- 对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)
- 一道阿里多线程面试题分析
- 一道初等几何题的解法的分析
- 关于一道java面试题的分析
- java算法:算法分析事例
- 一道小小面试题的细节分析
- 一道面试题的分析
- 一道算法题的数学分析
- 写出float x 与“零值”比较的if语句——一道面试题分析
- 一道优雅面试题分析js中fn()和return fn()的区别
- 关于一道面试题的分析与解答
- 史上最难的一道Java面试题 (分析篇)
- 写出float x 与“零值”比较的if语句——一道面试题分析
- 一道面试题的分析
- 最大不相交区间求法分析(结合一道例题)
- 分享我的一道电商需求分析的面试题!
- Trie树的应用,一道算法问题求解 问题分析
- java算法:算法分析事例