JAVA;.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和

AVA;.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和

/*从题目中可以看出分子分母是一个fibonacci数列

 *这就好办了

 *给分吧

 *by Herim

*/

public class Test {

public static void main(String[] args) {

System.out.println(add(20));

}

//求斐波那契(fibonacci)数列 

public static double fibonacci(int pos) {

if(pos==1||pos==2) {

return 1;

}

else {

return fibonacci(pos-1)+fibonacci(pos-2);

}

}

//求和

public static double add(int i) {

String output ="";

double sum = 0;

int j = i+2;

for(i=3;i<=j;i++) {

sum += fibonacci(i)/fibonacci(i-1); //求和

output += (int)fibonacci(i)+"/"+(int)fibonacci(i-1)+ "+";//输出控制表达式

}

      System.out.println(output.substring(0, output.length()-1)+ "=");//打印表达式

return sum;

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-06
楼主你的数字太大换了好几个类型才解决了
先说答案。。。20个fab数列分子分母和
9552484077401/309601753890
30.854101946705867
主函数
import java.math.BigInteger;

public class Run {

private BigInteger one=new BigInteger("1");
private BigInteger two=new BigInteger("2");

private BigInteger fab(BigInteger m){
if(m.toString().equals("1")) return one;
if(m.toString().equals("2")) return one;
return fab(m.subtract(one)).add(fab(m.subtract(two)));
}

public static void main(String[] args){
Run run=new Run();
NumberAdd add=new NumberAdd();
int sumBegin=3;
Fraction last=null;
for(int i=sumBegin;i<sumBegin+20;i++){
BigInteger sumTemp=run.fab(new BigInteger(Integer.toString(i)));
BigInteger demoTemp=run.fab(new BigInteger(Integer.toString(i-1)));
Fraction result=new Fraction();
result.setDenominator(demoTemp);
result.setNumerator(sumTemp);
if(last==null){
last=result;continue;
}else{
last=add.getFractionSum(last, result);
}
}
System.out.println(last.getFraction());
System.out.println(last.getNumerator().doubleValue()/last.getDenominator().doubleValue());
}
}
分数相加
import java.math.BigInteger;

public class NumberAdd {

public Fraction getFractionSum(Fraction sumadd,Fraction summand){
Fraction result=new Fraction();
result.setNumerator(sumadd.getNumerator().multiply(summand.getDenominator()).add(summand.getNumerator().multiply(sumadd.getDenominator())));
result.setDenominator(sumadd.getDenominator().multiply(summand.getDenominator()));
reduction(result);
return result;
}

private void reduction(Fraction content){
//最大公约
BigInteger m=content.getNumerator();BigInteger n=content.getDenominator();
BigInteger number=m.gcd(n);
//最大公约数为1时不约分
if(!number.toString().equals("1")){
content.setDenominator(content.getDenominator().divide(n));
content.setNumerator(content.getNumerator().divide(n));
}
}

}本回答被网友采纳
第2个回答  2013-12-06
import java.util.*;

public class Test {
public static void main(String[] args) {
int c = 1;
int b = 1;
for (int i = 0; i < 20; i++) {
c = c + b;
b = c + b;
System.out.println(c + "\t" + b);
}
}
}
第3个回答  2013-12-06
public class Test {
public static void main(String[] args) {
int c = 0;
int b = 1;
double sum = 0;
for (int i = 0; i < 20; i++) {
c = c + b;
b = c + b;
sum += b / c;
}
System.out.println(sum);
}
}
相似回答