第一天给0.01元,第二天给0.02元,以此类推,每一天是前一天的2倍,连续一个月结果

最近看到一个段子,岳父给女儿的男朋飞说:不要你多少彩礼,只需要你第一天给0.01元,第二天给0.02元,以此类推,每一天是前一天的2倍,连续一个月就把女儿嫁给你,女婿高兴的答应了,但是女婿发现情况越来越不对,那么一个月总共需要给多少钱呢,10737418.23元,对,你没看错,一千多万
代码如下:

public class MoneyTest {
    @Test
    public void test()throws Exception{
        double j = 0.01;
        double a = 0;
        ArrayList<Double> list = new ArrayList<Double>();
        for (int i = 1; i <=30 ; i++) {
            if (i == 1){
                j =  0.01;
                System.out.println("第"+ i +"天的钱是:"+ j +"元");
                list.add(j);
            }else {
                j*=2;
                System.out.println("第"+i +"天是:" +j +"元");
                list.add(j);
            }
        }
        for (int k = 0; k < list.size(); k++) {
            a +=list.get(k);//计算结果是科学计数法,需要进行转换
        }
        //a变成一个小数点后8位的数字
        java.text.DecimalFormat df = new DecimalFormat("#.########");
        String s = df.format(a);
        System.out.println("总额是:" + s +"元");
        }
}
这是一个经典的等比数列求和的问题,其中首项(a1)为0.01,公比(r)为2每天)。等比数列前n项和的公式是: \[ S_n = a_1 \times \frac{1 - r^n}{1 - r} \] 在这个情况下,我们需要计算30(n=30)内的总和。但是要注意,因为初始值是递增的,所以当达到某个点后,实际数可能会少于30,比如第6就已经超过了1000($2^5$),超过的部分不再计算。我们只需要计算前6的总和,然后再加上剩余数的累计价值。 让我们先计算前6的总和,然后用递推的方式处理剩余数(从第7到第30): 对于前6: \[ S_6 = 0.01 \times \frac{1 - 2^6}{1 - 2} \] 对于剩余数: 从第7开始,每天的金额都是前一天2,直到第30,我们可以直接乘以6后的累计金额得到结果。 现在,让我帮你计算一下。 >>> ```java public double calculateTotal(int n) { double a1 = 0.01; double r = 2; // 前六的等比数列和 double sumFirstSixDays = a1 * (1 - Math.pow(r, 6)) / (1 - r); // 计算剩余数的累计金额 double sumRemainingDays = sumFirstSixDays * r; // 第七第一天 for (int i = 1; i <= 24; i++) { // 只需加24次,因为第25已经是大于1000了 sumRemainingDays += sumRemainingDays; } return sumFirstSixDays + sumRemainingDays; } double totalSumAfterThirtyDays = calculateTotal(30); System.out.println("30内的总和是:" + totalSumAfterThirtyDays); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值