最近在面试中遇到这样的一道算法题:
       求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;
}
}

一道java算法题分析的更多相关文章

  1. 一道java算法题

    12个人围成一圈,序号依次从1至12,从序号1开始顺时针依次数,数到7的人退出,下一个再依次从1开始数,求留下来的最后一个人的原始序号. public static void joseph(int[] ...

  2. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  3. 25道经典Java算法题

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   //这是一个菲波拉契数列问题 [Java] 纯 ...

  4. 50道java算法题(一)

    [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:   兔子的规律为数列1 ...

  5. 趣味Java算法题(附答案)

    [程序1]    题目:古典问题:有一对兔子,从出生后第3个月起每一个月都生一对兔子,小兔子长到第三个月后每一个月又生一对兔子,假如兔子都不死,问每一个月的兔子总数为多少?    //这是一个菲波拉契 ...

  6. 史上最难的一道Java面试题 (分析篇)

    博客园 匠心零度 转载请注明原创出处,谢谢! 无意中了解到如下题目,觉得蛮好. 题目如下: public class TestSync2 implements Runnable { int b = 1 ...

  7. 面试-java算法题

    1.编写一个程序,输入n,求n!(用递归的方式实现). public static long fac(int n){ if(n<=0) return 0; else if(n==1) retur ...

  8. 【JAVA算法题】职业抢劫

    题目 /*You are a professional robber planning to rob houses along a street. * Each house has a certain ...

  9. 某厂java算法题实现及改进【有n个人成一圈,顺序排号(编号为1到n),从第一个人开始报数1到3报数】

    一.第一种实现: 实现比较简单,直接贴现成的代码了,第一种实现: /** * 总人数 * * @param d */ private static void sortQuerry1(int d) { ...

随机推荐

  1. ng-template寄宿方式

    如果你是一个angular的开发者的话,对于ng-html2js你应该 很熟悉.对于angular的指令,我们经常需要定义模板( directive template/templateUrl),你可以 ...

  2. prerender-SPA程序的SEO优化策略

    随着web2.0的兴起,ajax的时代已经成为了事实,更如今Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single ...

  3. C#执行外部程序之执行DOS命令和批处理

    在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便.今天就来说一下C#中如何调用外部程序,执行一些特殊任务. 这 ...

  4. java线程与并发(一)

    有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识.希望这次能一直坚持下去. 想了解并发,必须 ...

  5. NSString NSUrl 相互转化

    //NSString 转为 NSURL NSString *webStr = @"www.baidu.com"; NSURL *webUrl = [NSURL URLWithStr ...

  6. javascript日常总结

    如何去除掉inline-block元素之间的默认间距 前几天写一个页面 1 2 3 4 div{width:900px;} div li{ display:inline-block; width:30 ...

  7. vue初体验:实现一个增删查改成绩单

    前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方 ...

  8. Lock VS Monitor

    Lock Monitor   多线程操作的时候,为防止死锁,我们经常采用加Lock的方式解决,下面就谈一下Lock的具体运用和Lock可以用什么来替换 首先,看代码: private static o ...

  9. KnockoutJS 3.X API 第四章 数据绑定(4) 控制流with绑定

    with绑定的目的 使用with绑定的格式为data-bind="with:attribute",使用with绑定会将其后所跟的属性看作一个新的上下文进行绑定.with绑定内部的所 ...

  10. Java-set集合

    package exception; import java.util.Map; import java.util.TreeMap; import java.util.HashMap; public ...