java 数字序列_用java求出数列2/1,3/2,5/3,8/5,13/......前30项和是多少?

本文介绍了如何使用Java计算斐波那契数列的分数形式前30项和,通过避免直接计算数值以保持精度。通过创建Fs类表示分数,并实现加法运算和最大公约数计算,确保了计算过程的准确性。
摘要由CSDN通过智能技术生成

学生课后作业请自行完成。。

不过还是帮你写了一下仅供参考,考虑到是分数求和,为了不失精度,不能直接算出分数的值出来。需要用分式的加法公式,即求分母的最小公倍数,再将各自分子乘以一个数再加起来。

一开始以为整形就够了,后面执行才发现原来这个数字很大,整形会溢出,遂改为long型。

先看下执行结果

Fs是封装的分数对象,fenzi为分子的值,fenmu为分母的值,所以最终算的前30项和的大小就是

fenzi/fenmu, 数字太大就不打出来了。结果在上面截图。

下面是代码

主程序Test1.java

/**

* 用java求出数列2/1,3/2,5/3,8/5,13/......前30项和是多少?

* 求解

*

* @authorrensong.pu

* @date2019/11/22 10:32 星期五

**/

public class Test1 {

public static void main(String[] args) {

int fenzi = 2;

int fenmu = 1;

int tmp;

Fs sum = new Fs(0, 1);

for (int i = 0; i < 30; i++) {

Fs fe = new Fs(fenzi, fenmu);

System.out.println(fe);

sum = sum.add(fe);

tmp = fenzi;

fenzi = fenzi + fenmu;

fenmu = tmp;

}

System.out.println("前30项和:" + sum);

}

}

public class Fs {

long numerator; // 分子

long denominator; // 分母

Fs() {

}

Fs(long a, long b) {

if (a == 0) {

numerator = 0;

denominator = 1;

} else {

setNumeratorAndDenominator(a, b);

}

}

void setNumeratorAndDenominator(long a, long b) { // 设置分子和分母

long c = f(Math.abs(a), Math.abs(b)); // 计算最大公约数

numerator = a / c;

denominator = b / c;

if (numerator < 0 && denominator < 0) {

numerator = -numerator;

denominator = -denominator;

}

}

long getNumerator() {

return numerator;

}

long getDenominator() {

return denominator;

}

long f(long a, long b) { // 求a和b的最大公约数

if (a < b) {

long c = a;

a = b;

b = c;

}

long r = a % b;

while (r != 0) {

a = b;

b = r;

;

r = a % b;

}

return b;

}

Fs add(Fs r) { // 加法运算

long a = r.getNumerator();

long b = r.getDenominator();

long newNumerator = numerator * b + denominator * a;

long newDenominator = denominator * b;

Fs result = new Fs(newNumerator, newDenominator);

return result;

}

@Override

public String toString() {

return "Fs{" +

"fenzi=" + numerator +

", fenmu=" + denominator +

'}';

}

}

码字不易,求赞><

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值