Scrooge先生有一筆他想投資的錢 “P”。在他這樣做之前,他想知道 “P” 這個總和,必須將其保存在銀行中多少年,以使其達到所需的 “D” 金額。
該金額在每年支付利息“I”的銀行中保留 “Y” 年。在當年繳納 “T” 稅後,新款項被重新投資。
稅收注意事項:不是對投資本金徵稅,而是僅對當年的應計利息徵稅
因此,Scrooge先生必須等待 3 年才能將初始本金等於所需的金額。
您的任務是完成提供的方法並返回整個 “Y” 年數,以便 Scrooge 先生獲得所需的金額。
假設:假設期望的 “D” 主語始終大於初始主語。但是,最好考慮到,如果期望的 “D”等於“P”,則應該返回 0 年。
依據題意可整理出以下重點:
本金 * (1 + 利率) - 稅收
稅收 = 本金 * (1 + 利率) - 本金 * 稅率
function calculateYears(principal, interest, tax, desired) {
if (principal >= desired) {
//記得寫 return!!!
return 0;
}
let year = 0;
while (principal < desired) {
year++;
let taxMoney = principal * interest * tax;
principal = principal * (1 + interest) - taxMoney;
}
return year;
}
中間犯了蠻多很瞎的錯誤...... 一開始寫完之後,發現實際測試都沒有通過,結果發現:
principal >= desired
,難怪迴圈都不執行,因為一開始就是 false 了1 + 利率
,否則本金會一直變少,不會變多算法上可以更為精簡,像是這段是筆者寫的:
while (principal < desired) {
let taxMoney = principal * interest * tax;
principal = principal * (1 + interest) - taxMoney;
}
可以改寫如下:
while (principal < desired) {
principal += principal * interest * (1 - tax);
}
今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論哦~