题目 1547: [蓝桥杯]理财计划(Java题解)

一、题目

银行近期推出了一款新的理财计划“重复计息储蓄”。储户只需在每个月月初存入固定金额的现金,银行就会在每个月月底根据储户账户内的金额算出该月的利息并将利息存入用户账号。现在如果某人每月存入k元,请你帮他计算一下,n月后,他可以获得多少收益。

二、题解

其实题目很简单啊,直接最原始的方法模拟就好。每一个循环先计算该月的利息,然后再计算下月要投入的金额,也就是 当前本金+该月利息+该月存入的固定金额 。于是乎就写出了下面的Java代码~:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double bj = sc.nextInt();
        int time = sc.nextInt();
        double lx = sc.nextDouble();
        double sum = 0;
        int t = (int)bj;
        for(int i=0;i<time;i++){
            sum += bj*lx;
            bj += bj*lx+t;
        }
        System.out.printf("%.2f\n",sum);
        sc.close();
    }
}

但是呢你会发现,测试个样例数据都过不去诶:

输入:1000 6 0.01
输出:213.54

于是乎就奇奇怪怪诶,怎么莫名其妙多了0.01???

那我们不保留小数,完整的输出一下子:

输出:213.535211

好家伙,好像有点东西了诶,原来是后面的5被四舍五入了!

那我们怎么办呢?不如先保护一下前两位小数吧!然后再输出!

sum = (int)(sum*100);
System.out.printf("%.2f\n",sum/100);

经过这样,我们就能不让它进行四舍五入了!

三、最终代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double bj = sc.nextInt();//注意此处bj要为double,不然的话在循环计算的bj的时候,会损失精度
        int time = sc.nextInt();
        double lx = sc.nextDouble();
        double sum = 0;
        int t = (int)bj;
        for(int i=0;i<time;i++){
            sum += bj*lx;
            bj += bj*lx+t;
        }
        sum = (int)(sum*100);
        System.out.printf("%.2f\n",sum/100);
        sc.close();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值