菜鸟来提问啦。关于用java循环实现复利的问题。

大家好:题目如下:
假设每个月向银行存入100美元。每月利率是0.00417
第一个月后账户上的金额为:
100*(1+0.00417)=100.417元
第二个月后账户上的金额为:
(100+100.417)*(1+0.00417)=201.252元
第三个月后账户上的金额为:
(100+201.252)*(1+0.00417)=302.507元

编写程序显示6个月后的金额。希望能用循环来解答这个问题。有其他更好的方法的也欢迎指点一下。谢谢大家啦

其实你问的这个问题本身跟java一点关系都没有呢~为何如此执着于工具本身呢?解决问题的方法就在那里,不来不去~
你自己已经有一个基本的思路了,只差一点循环的技巧而已。

代码如下,如果运行有什么问题,可以私聊。

 #include "stdio.h"

int main( )
{
    int month_save = 100;
    int i;
    float bank_account = month_save;
    for (i = 1;i <= 6;i++) {
        bank_account = bank_account * (1 + 0.00417);
        printf("After %d months,there is %f dollars in the bank account.\n",i,bank_account);

        bank_account = month_save + bank_account;
    }
    return 0;
}

结果如图:
图片说明

其实这个问题还可以用递归来解决~

用递归吧,代码简洁易懂。

    /**按1块钱算复利。rate是每月利率,n是存的月数**/
    public static double compute(double rate, int n) {
        if (n == 1) {
            //1块钱存一个月的话,得(1 + rate)元
            return (1 + rate);
        } else {
            //1块钱存n个月的话,本利总额是上个月(n-1)的总额+本月1块钱,再乘以(1 + rate)
            return compute(rate, n - 1) * (1 + rate) + (1 + rate);
        }
    }

    //每个月存款数目
    public static int depositMoney = 100;
    //利率
    public static double rate = 0.00417d;

    public static void main(String[] args) {
        int n = 6;
        //求第n个月的本利总额
        System.out.println(depositMoney * compute(rate, n));
    }

当然如果应用于实际的金额计算的话,不能用double,要换成无精度损失的BigDecimal用于浮点数计算。

利用递归的思路来算的话,代码如下所示(C语言表示):

 #include "stdio.h"
float recur(int i,float r);         //递归函数声明

int main(int argc, char* argv[])
{
    int i;
    float bank_account ;
    float rate = 0.00417;
    bank_account = recur(6,rate);
    printf("After 6 months,there is %f dollars in the bank account.\n",bank_account);
    return 0;
}

float recur(int i,float r) {
    float final = 0;
    int m = 100;
    if (i == 1)                        //第一个月后的账户资金
        final = m * (1 + r);
    else final = (recur(i-1,r) + m) * (1 + r);      //从第二个月开始,每个月后的账户资金与前一个月有关
    return final;
}

![图片说明](https://img-ask.csdn.net/upload/201510/28/1445996135_200258.jpg)图片说明

假设每个月向银行存入100美元。每月利率是0.00417
for(int i=1;i<=6;i++){
Double ss = 100.00;
Double tt[i] = null;
Double tt[i] =ss*i+ 0.00417*100*i
if(i==6){
System.out.println(tt[6]);
}
}

递归的常见例子, xionglangs给的就很好了。