我在做一道练习时遇到了一个问题.如下
编写一个java应用程序,计算1+2!+3!+4!+......从第100项到第200项之和.
我用的是double类型的数据.可是编出来之后从第171项开始,也就是171! 已经超过了10的308次幂,显示infinity.
如果我要范围更大的浮点数应该怎么办?
{
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编辑过]
----------------解决方案--------------------------------------------------------
BigDecimal
----------------解决方案--------------------------------------------------------
谢谢!还不知道怎么用这个类,不过我会查查文档.
----------------解决方案--------------------------------------------------------
能算了,可是显示的结果很长,不知道有没有转成科学计数法的方法。
其实用这个类提供的方法是可以把指数形式拼出来的,就是多写几行而已。
[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编辑过]
----------------解决方案--------------------------------------------------------
推荐使用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);
}
}
----------------解决方案--------------------------------------------------------