題目要求:給定 n (0 < n < 80),輸出不超過 n 位的最大 3 的冂。直接用 int/long long 會在 n≥10 時溢出,必須實現高精度乘法。
用整型數組 digit[] 存儲大整數,每個元素存一位(或四位),低位在低索引。乘以 3 時逐位相乘並處理進位。
digit[0] = 1,長度 len = 1。k = 1, 2, ...:
digit[i] = digit[i] * 3 + carry,carry = digit[i] / 10,digit[i] %= 10。len。len > n,跳出循環,上一輪結果即為答案。#include
#include
int main() {
int n;
scanf("%d", &n);
int digit[200] = {0}; // 足夠存 80 位
digit[0] = 1;
int len = 1;
int prev_len = 1;
int prev_digit[200];
for (int k = 1; ; k++) {
// 備份上一輪結果
prev_len = len;
memcpy(prev_digit, digit, sizeof(digit));
int carry = 0;
for (int i = 0; i < len; i++) {
int val = digit[i] * 3 + carry;
digit[i] = val % 10;
carry = val / 10;
}
while (carry > 0) {
digit[len++] = carry % 10;
carry /= 10;
}
if (len > n) break;
}
// 輸出上一輪結果
for (int i = prev_len - 1; i >= 0; i--) {
printf("%d", prev_digit[i]);
}
printf("\n");
return 0;
}
此方法通用於任意大整數乘法、冂運算,是 ACM/ICPC 入門必備技能。