| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 743 人关注过本帖
标题:[讨论]怎么计算超长的数据?
只看楼主 加入收藏
liguoshi1984
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-7-4
收藏
 问题点数:0 回复次数:4 
[讨论]怎么计算超长的数据?

我在做一道练习时遇到了一个问题.如下
编写一个java应用程序,计算1+2!+3!+4!+......从第100项到第200项之和.
我用的是double类型的数据.可是编出来之后从第171项开始,也就是171! 已经超过了10的308次幂,显示infinity.
如果我要范围更大的浮点数应该怎么办?

public class E
{
  public static void main(String[] args)
  {
   int i,j;
   double sum=0,m;
    for(i=100;i<=200;i++)
    {
     m=1;
       for(j=1;j<=i;j++)
       {m=m*j;
        }
    System.out.println(i+"m="+m);
    sum=sum+m;
     }
   System.out.println("sum="+sum);
  }
}

[此贴子已经被作者于2007-7-4 8:38:39编辑过]

搜索更多相关主题的帖子: 数据 double public java class 
2007-07-04 08:22
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
BigDecimal

可惜不是你,陪我到最后
2007-07-04 09:08
liguoshi1984
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-7-4
收藏
得分:0 

谢谢!还不知道怎么用这个类,不过我会查查文档.

2007-07-05 17:02
liguoshi1984
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-7-4
收藏
得分:0 

能算了,可是显示的结果很长,不知道有没有转成科学计数法的方法。
其实用这个类提供的方法是可以把指数形式拼出来的,就是多写几行而已。

[CODE]import java.math.*;
public class E
{
public static void main(String[] args)
{
int i,j;
BigDecimal sum=new BigDecimal(0);
BigDecimal m=new BigDecimal(0);
for(i=100;i<=200;i++)
{ m=BigDecimal.valueOf(1);
for(j=1;j<=i;j++)
{BigDecimal a=new BigDecimal(j);
m=m.multiply(a);
}
sum=sum.add(m);
}
System.out.println("100项到200项之和为:"+sum.toString());
}
}[/CODE]

[此贴子已经被作者于2007-7-5 21:10:01编辑过]

2007-07-05 20:58
jdk2006
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2007-5-12
收藏
得分:0 

推荐使用JAVA提供的BigDecimal类
学习,练习一下可以
老师布置的作业编写一个求大整数的类:
public class BigNumber{
private String value;
private char[] str,str2;
private int[] num;
private int len;
public BigNumber(String value){
this.value=value;
len=value.length();
}
public void add(BigNumber b){
int leng=b.value.length();

if(len>=leng){
str=new char[len];
str2=new char[leng];
num=new int[len+1];
for(int i=0,j=0;i<len||j<leng;i++,j++){
str[i]=this.value.charAt(i);
if(j>=leng){}
else str2[j]=b.value.charAt(j);
}
}
else {
str=new char[leng];
str2=new char[len];
num=new int[leng+1];
for(int i=0,j=0;i<leng||j<len;i++,j++){
str[i]=b.value.charAt(i);
if(j>=len){}
else str2[j]=this.value.charAt(j);
}
}
int count=0;
for(int i=str.length-1,j=str2.length-1,k=str.length;j>=0||i>=0;i--,j--,k--){
if(j<0){
num[k]=(int)(str[i]-'0')+count;
num[0]=1;
}
else{
num[k]=(int)(str[i]-'0')+(int)(str2[j]-'0')+count;
if((i==j)&&(num[k]<10)) num[0]=0;
else num[0]=1;
}
if(num[k]>=10){
num[k]=num[k]-10;
count=1;
}else count=0;
}
for(int i=0;i<=str.length;i++)
System.out.print(num[i]);
}
public static void main(String[] args){
BigNumber a=new BigNumber("2222");
BigNumber b=new BigNumber("8888");
a.add(b);

}
}


2007-07-07 09:25
快速回复:[讨论]怎么计算超长的数据?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027740 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved