这是面试的季节。
前几天去面试,碰到一个java题目,要求1000!(1000*999*998...*2*1)的值。
因为很显然,用原始的类型,即使是double,也没有办法容纳这么大的数字。所以当时用了下面的方法:
double c = 1.0;
int scale = 0;
for(int i=1; i<1001; i++) {
c *= i;
if(c > 1000000000) {
c = c/1000000000;
scale += 9;
}
}
System.out.println("1000! = "+c+"*10("+scale+")");
方法的输出为
1000! = 402.38726007709414*10(2565)
可以看出,小数点的位数有点不够。
回家看了看jdk的api,看到了BigDecimal这个类,嗯,这个类才是处理此类问题的正解,很简单。
BigDecimal big = new BigDecimal(1);
for(int i=1; i<1001; i++) {
big = big.multiply(new BigDecimal(i));
}
big.setScale(100);
System.out.println(big);
方法的输出为:
40238726007709377354370243392300398571937486421071463254379991042993851239862
90205920442084869694048004799886101971960586316668729948085589013238296699445
90997424504087073759918823627727188732519779505950995276120874975462497043601
41827809464649629105639388743788648733711918104582578364784997701247663288983
59557354325131853239584630755574091142624174743493475534286465766116677973966
68820291207379143853719588249808126867838374559731746136085379534524221586593
20192809087829730843139284440328123155861103697680135730421616874760967587134
83120254785893207671691324484262361314125087802080002616831510273418279777047
84635868170164365024153691398281264810213092761244896359928705114964975419909
34222156683257208082133318611681155361583654698404670897560290095053761647584
77284218896796462449451607653534081989013854424879849599533191017233555566021
39450399736280750137837615307127761926849034352625200015888535147331611702103
96817592151090778801939317811419454525722386554146106289218796022383897147608
85062768629671466746975629112340824392081601537808898939645182632436716167621
79168909779911903754031274622289988005195444414282012187361745992642956581746
62830295557029902432415318161721046583203678690611726015878352075151628422554
02651704833042261439742869330616908979684825901254583271682264580665267699586
52682272807075781391858178889652208164348344825993266043367660176999612831860
78838615027946595513115655203609398818061213855860030143569452722420634463179
74605946825731037900840244324384656572450144028218852524709351906209290231364
93273497565513958720559654228749774011413346962715422845862377387538230483865
68897646192738381490014076731044664025989949022222176590433990188601856652648
50617997023561938970178600408118897299183110211712298459016419210688843871218
55646124960798722908519296819372388642614839657382291123125024186649353143970
13742853192664987533721894069428143411852015801412334482801505139969429015348
30776445690990731524332782882698646027898643211390835062170950025973898635542
77196742822248757586765752344220207573630569498825087968928162753848863396909
95982628095612145099487170124451646126037902930912088908694202851064018215439
94571568059418727489980942547421735824010636774045957417851608292301353580818
40096996372524230560855903700624271243416909004153690105933983835777939410970
02775347200000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000
恐怖的数字,呵呵。
分享到:
相关推荐
原创一道Java笔试面试题考考大家!附带答案!
java面试题之行列转换 Oracle 和SQLServer两种方式 详细例子以及说明 一条语句实现,绝对看得懂! 方便理解!
【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..
一道有趣的java笔试题.
本文给大家分享一道史上最难的一道Java面试题,非常不错,具有参考借鉴价值,需要的朋友参考下吧
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc... Java面试题及答案(基础题122道) - 在梦想与现实之间徘徊 - JavaEye技术网站.mht 等等,还有好多。
企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...
北京宏景世纪软件股份有限公司Java笔试题
java程序员求职之前看这一套就够了。包括Java程序员阿里面经等,java求职必备知识点,简历模板,JAVA核心知识点整理,蓝桥杯java历年真题及答案整理(共129道题目及答案),Java面试突击-V3.0
java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。
一道Java面试题答案:Java实现字符串倒序
笔试题,使你面试的成功率大大提高,好好学习,文档的收集,认真分析每一道题。
喜的是,别人没看到这些悉心整理的面试题你看到了;悲的是,面试你的面试官可能也看到了!前几天整理了很多关于面试的经典题目,例如Redis为什么是单线程的、SqlSessionTemplate是如何保证SqlSession线程安全性的、...
一套Java开发工程师笔试试题 (请不要在试题上留任何痕迹,所有答案均写在答题纸上) 包括了选择题、填空题、简答题、程序读写题 都有答案 最后一道简答题关于设计模式的题目见博客: ...
计算机后端-Java-Java核心基础-第21章 常用类 09. String的一道面试题.avi
主要介绍了阿里的一道Java并发面试题详解,网络、并发相关的知识,相对其他一些编程知识点更难一些,主要是不好调试并且涉及内容太多 !,需要的朋友可以参考下
2011年5月份参加腾讯校招的时候,一位工程师给的面试题。我觉得挺有意思的,拿出来,与君共勉
每天一道面试题,周五冲冲冲!List、Set、Queue和Map是Java集合框架中的四个主要接口,它们各自具有不同的特点和用途。 1. List(列表): - 允许重复元素。 - 具有按照元素插入顺序维护的有序集合。 - 可以通过索引...
3. 记一道字节跳动的算法面试题 4. 关于三次握手与四次挥手面试官想考我们什么?--- 不看后悔系列 5. 腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树? 6. 你真的了解 i++, ++i 和 i+++++i 以及 i+++i++ 吗...