锁定老帖子 主题:一道java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-14
Godlikeme 写道 BigDecimal就是string的,表示整数没问题,但是在表示小数上bigdecimal还是有精度限制的。
受教了.... 人类智慧是很难超越的.... |
|
返回顶楼 | |
发表时间:2007-03-14
Godlikeme 写道 BigDecimal就是string的,表示整数没问题,但是在表示小数上bigdecimal还是有精度限制的。
我觉得string只是一个Cache的作用,大数实现上应该是数组实现的. 这个题要是我答会这样(粗糙写了一下): public class BigNumber { private static int[] ret=new int[3000]; private static int len=0; public static void main(String[] args) { factorialFun(1000); for(int i=len-1;i>=0;i--){ System.out.print(ret[i]); } } private static void factorialFun(int n){ for(int i=1;i<=n;i++){ if(i==1){ ret[0]=1; len=1; }else{ for(int j=0;j<len;j++){ ret[j]=i*ret[j]; } for(int j=0;j<len;j++){ if(ret[j]>=10){ if(ret[len-1]>=10){ len++; } ret[j+1]+=ret[j]/10; ret[j]=ret[j]%10; } } } } } } |
|
返回顶楼 | |
发表时间:2007-03-14
andershong 写道 Godlikeme 写道 BigDecimal就是string的,表示整数没问题,但是在表示小数上bigdecimal还是有精度限制的。
我觉得string只是一个Cache的作用,大数实现上应该是数组实现的. 这个题要是我答会这样(粗糙写了一下): public class BigNumber { private static int[] ret=new int[3000]; private static int len=0; public static void main(String[] args) { factorialFun(1000); for(int i=len-1;i>=0;i--){ System.out.print(ret[i]); } } private static void factorialFun(int n){ for(int i=1;i<=n;i++){ if(i==1){ ret[0]=1; len=1; }else{ for(int j=0;j<len;j++){ ret[j]=i*ret[j]; } for(int j=0;j<len;j++){ if(ret[j]>=10){ if(ret[len-1]>=10){ len++; } ret[j+1]+=ret[j]/10; ret[j]=ret[j]%10; } } } } } } 受教!! |
|
返回顶楼 | |
发表时间:2007-03-15
非常棒
|
|
返回顶楼 | |
发表时间:2007-03-15
楼上不厚道
|
|
返回顶楼 | |
发表时间:2007-03-16
楼上的楼上不厚道
|
|
返回顶楼 | |
发表时间:2007-03-18
hurricane1026 写道 我倒觉得为什么不自己写一个自己的bigDecimal呢?你如果会小学的乘法竖式就没有理由不会这个吧。招聘要是去考api也真够无聊的。
ps:不好意思,回完了才发现已经被实现了。 恩,我自己写了一个,不过根上面那位的一比就相形见拙了。 另,我比他的复杂,有小数位,但不够简洁。 |
|
返回顶楼 | |