2017年8月9日 星期三

[ITSA Basic] 題目24. 計算複利

import java.util.*;
import java.math.BigDecimal;
import java.math.BigInteger;
/*
 *  題目24. 計算複利
 *  完成日期:2017/08/09
 *  作者:王如馨
 */
public class Num24_compound_interest {

public static void main(String[] args) throws java.lang.NumberFormatException {
BigDecimal r, p ; //每期利率, 每期投入金額
BigDecimal _b = new BigDecimal("1"); //利率要+1(本金)
BigDecimal sum = new BigDecimal("0");//月底本利和
int n; //期數

Scanner sc = new Scanner(System.in);
        r = sc.nextBigDecimal();   //輸入每期利率
        n = sc.nextInt();          //輸入期數
        p = sc.nextBigDecimal();   //輸入每期投入金額

   for(int i = 1;i <= n;i++)
   {
    //計算月底本利和:sum = (sum+p)*(r+1)
    sum = (sum.add(p)).multiply(r.add(_b));
   }
   //把BigDecimal轉換成BigInteger
   BigInteger Intsum = sum.toBigInteger();
   System.out.println(Intsum);  
}
}

--這裡最難的就是期數越大,本利合就會有誤差,為了避免造成誤差所以使用BigDecimal和BigInteger。
--運算是使用.add()和.multiply(),只有同為Big開頭的才能運算,所以我把利率+1的1也宣告成BigDecimal。
--如果把n宣告成Big開頭的話就無法再在for迴圈的()裡使用了。
--在計算完成後把BigDecimal轉換成BigInteger就完成了。

沒有留言:

張貼留言