论坛首页 招聘求职论坛

一道java面试题

浏览 14075 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-14  
Godlikeme 写道
BigDecimal就是string的,表示整数没问题,但是在表示小数上bigdecimal还是有精度限制的。

受教了....
人类智慧是很难超越的....
0 请登录后投票
   发表时间: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;
					}
				}
			}
		}
	}
}
0 请登录后投票
   发表时间: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;
					}
				}
			}
		}
	}
}

受教!!
0 请登录后投票
   发表时间:2007-03-15  
非常棒
0 请登录后投票
   发表时间:2007-03-15  
楼上不厚道
0 请登录后投票
   发表时间:2007-03-16  
楼上的楼上不厚道
0 请登录后投票
   发表时间:2007-03-18  
hurricane1026 写道
我倒觉得为什么不自己写一个自己的bigDecimal呢?你如果会小学的乘法竖式就没有理由不会这个吧。招聘要是去考api也真够无聊的。
ps:不好意思,回完了才发现已经被实现了。

恩,我自己写了一个,不过根上面那位的一比就相形见拙了。
另,我比他的复杂,有小数位,但不够简洁。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics