一、题目
银行近期推出了一款新的理财计划“重复计息储蓄”。储户只需在每个月月初存入固定金额的现金,银行就会在每个月月底根据储户账户内的金额算出该月的利息并将利息存入用户账号。现在如果某人每月存入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();
}
}