JAVA简单的题,会的帮个忙~累积类型的

来源:百度知道 编辑:UC知道 时间:2024/06/21 06:00:25
//求Fibonacci的题
//例如1/2+3/2+5/3+8/5+13/8+21/13,分子分母都是fibonacci数列,求他们的前N项和
class Fibonacci{
int n;
Fibonacci(){
System.out.println("请输入求前N项的和");
n=Input.readInt();
}
void function(){
double z=0;
int a1=2,a2=3,b1=1,b2=2;
int[] several1=new int[n];
int[] several2=new int[n];
double[] several3=new double[n];
for(int i=1;i<=n;i++){
several1[i-1]=a1+a2;
a1=a1+a2;
a2=a2+a1;
}
for(int i=1;i<=n;i++){
several2[i-1]=b1+b2;
b1=b1+b2;
b2=b2+b1;
}
for(int i=0;i<n;i++){
several3[i]=several1[i]/several2[i];
z=(z+several3[i]);
}
System.out.println(z);
}
public static void main(String[] args){
Fibonacci f=new Fibonacci();
f.function();
}
}

编译没问题,可是在打印的时候,我输入几它就打印几,不是期望的效果,请各位帮忙!
写的代码里面没有问题。可能运算符号出错了
我用的是“/”整除

/这个符号在小数运算的时候是不准确的
做下面一个方法试试看吧
/**
* 功 能: 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* 输入参数: v1 被除数
* v2 除数
* scale 表示表示需要精确到小数点以后几位。
* 返回参数: 两个参数的商
*/
public static double div(double v1,double v2,int scale){
if(scale<0)
throw new IllegalArgumentException("精确的小数位数小于0!");
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}