題目:計算 Z = 13.65 × (1.0063)^k,不使用 math.h 的 pow()。
#include
double power(double base, int exp) {
double result = 1.0;
if (exp < 0) {
base = 1.0 / base;
exp = -exp;
}
while (exp > 0) {
if (exp & 1) result *= base; // 快速冪優化
base *= base;
exp >>= 1;
}
return result;
}
int main() {
int k;
printf("輸入 k: ");
scanf("%d", &k);
double z = 13.65 * power(1.0063, k);
printf("Z = %.6f\n", z);
return 0;
}
double z = 13.65;
if (k > 0) {
for (int i = 0; i < k; i++)
z *= 1.0063;
} else if (k < 0) {
for (int i = 0; i < -k; i++)
z /= 1.0063;
}
時間複雜度 O(log k) vs 線性 O(k):
k=13 (1101二進制) result=1, base=1.0063 exp=13: odd → result*=base (1.0063), base^=2 (1.0126), exp=6 exp=6: even → base^=2 (1.0253), exp=3 exp=3: odd → result*=base (1.0379), base^=2 (1.0513), exp=1 exp=1: odd → result*=base (1.0910), base^=2, exp=0 1.0063^13 ≈ 1.0910
double 約 15-17 位有效數字,足夠一般金融計算exp(k * log(base))decNumber)