承接上一題,若房價每年上漲 10% 改為複利計算(即每年漲幅在上一年房價基礎上),其他條件不變:年薪 40 萬、初始房價 200 萬、不吃不喝全存。請問這位工程師還能買得起房嗎?
第 n 年房價 = 200 × 1.1^n(萬)
第 n 年總儲蓄 = 40 × n(萬)
我們需要找到最小整數 n 使得:40n ≥ 200 × 1.1^n
#include <stdio.h>
#include <math.h>
int main() {
int i = 0, flag = 0;
float salary = 40;
float begin_value = 200;
float rate = 0.1;
float late_value = begin_value * (1 + rate); // 第一年複利後房價
while (salary * i < late_value) {
i++;
late_value *= (1 + rate); // 複利:每年在上一年基礎上漲 10%
// 防止無限迴圈:若工作 100 年還買不起,判定為不可能
if (i > 100) {
flag = 0;
break;
}
flag = 1; // 只要進入迴圈且未超過 100 年,就設為可買
}
if (flag)
printf("經過 %d 年後,軟體工程師可以買到房子!\n", i);
else
printf("嗨,工作輩子,軟體工程師都不能買到房子,好慘哦!\n");
return 0;
}
程式會輸出:嗨,工作輩子,軟體工程師都不能買到房子,好慘哦!
原因在於指數增長(房價)最終會超越線性增長(儲蓄)。我們可以列表驗證前幾年:
| 年份 | 儲蓄(萬) | 房價(萬) | 差距 |
|---|---|---|---|
| 1 | 40 | 220 | -180 |
| 5 | 200 | 322 | -122 |
| 10 | 400 | 519 | -119 |
| 20 | 800 | 1346 | -546 |
| 50 | 2000 | 23478 | -21478 |
差距越來越大,永無交點。
late_value *= (1 + rate) 等價於 late_value = late_value * 1.1,精準模擬複利。flag 和 i > 100 保護,避免邏輯錯誤導致程式卡死。salary * i < late_value 判斷,因數值不大,精度足夠。這道題生動說明了指數增長的威力。在現實中,若收入增長跟不上資產價格增長(特別是複利型增長),單靠儲蓄極難實現階層躍升。這也是為何現代金融強調「投資理財」、「複利效應」以及「槓桿(貸款)」的原因。