大家好:题目如下:
假设每个月向银行存入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;
}
假设每个月向银行存入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给的就很好了。