public class Demo11 {
public static void main(String[] args) {
double sum=2/1;
double m=2;//定义分子
double n=1;//定义分母
for(int i=2;i<=20;i++){
m=m+n;
n=m-n;
sum+=(double) m/n; //将分子的类型强制转换成double,否则两个int相除,结果还是int会将小数点后都舍弃。
}
System.out.println(sum);
}
}
//用数组方法来实现
public class Demo2 {
public static void main(String[] args) {
double numerator[]=new double[20]; //创建分子长度为20的浮点型数组
double denominator[]=new double[20]; //创建分母长度为20的浮点型数组
numerator[0]=2;
denominator[0]=1;
double sum=numerator[0]/denominator[0];
for(int i=0;i<19;i++){
numerator[i+1]=numerator[i]+denominator[i];
denominator[i+1]=numerator[i];
sum+=(double)numerator[i+1]/denominator[i+1];
}
System.out.println(sum);
}
}
扩展资料
Java数列求和:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
public class QiuHe {
public static void main(String[] args){
float total=0;
for(int i=0;i<20;i++){
float top= getTop(i+1);
float bottom=getBottom(i+1);
total+=top/bottom;//每一项的值
}
System.out.println(total);
}
//获取分子核心递归方法
public static float getTop(int position){
if(position==1){
return (float)2;
}
if(position==2){
return (float) 3;
}
return getTop(position-1)+getTop(position-2);
}
//获取分母核心递归方法
public static float getBottom(int position){
if(position==1){
return (float) 1;
}
if(position==2){
return (float)2;
}
return getBottom(position-1)+getBottom(position-2);
}
}
1.首先弄清楚这组分数序列的规律:
从第二个数开始
分子=前一个数的分子+分母
分母=前一个数的分子
2.需求是前20项之和,因此循环20-1次相加是必然的.
3.第一个数初始化为x=2,y=1
4.从第二个数开始:
分子x=x+y
分母y=x
由于x的值发生变化,因此中间用变量a复制一下.
5.重复上面的操作,直到循环结束.
观察分数序列,发现分子是2,3,5... 分母是,2,3,5...实际上都是斐波那契数列的一部份.
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。
所以只要给出两个初始值,后面的数字就可以用前面的数的和来表示.
这里用x表示分子,y表示分母.用for循环把分数序列前20项加起来.最后打印结果.
sum+=(float)(x)/y; 用了强制类型转换,因为两个int型的数相除,结果也会是int型.
刚刚重写了一个,觉得这个简单易懂,楼主可以看看
#include "stdio.h"
void main()
{
float m,n,t,sum=0;
int i;
n=1.0;
m=2.0;
for(i=1;i<=20;i++)
{
sum+=m/n;
t=n+m;
n=m;
m=t;
}
printf("前20项和是%5.2f\n",sum);
}
#include
#include
main()
{
int i,count=0;
double sum=0.0;
int a1,a2,b1,b2,a3,b3;
a1=2; //第1项分子
a2=3; //第2项分子
b1=1; //第1项分母
b2=2; //第2项分母
sum = sum + a1*1.0/b1;
printf("%d/%d + ",a1,b1);
sum = sum + a2*1.0/b2;
printf("%d/%d ",a2,b2);
for(i=3;i<=20;i++)
{
a3=a1+a2;
b3=b1+b2;
printf(" + %d/%d",a3,b3);
sum = sum + a3*1.0/b3;
a1=a2;
b1=b2;
a2=a3;
b2=b3;
}
printf(" = %.2lf\n",sum);
}