C 語言基本類型(long long 64 位)最大約 9.22e18(19 位),超出範圍的整數(如 100 位、1000 位)無法直接存儲,需自定義結構。
a[0] 存**最低位**(個位段),a[len-1] 存最高位,便於進位傳遞;typedef struct {
int digits[ MAX_LEN ]; // 每元素存 4 位十進制
int len; // 有效位段數
int sign; // 1 正,-1 負
} BigInt;
void fromString(BigInt *b, const char *s) {
memset(b, 0, sizeof(BigInt));
if (*s == '-') { b->sign = -1; s++; }
int n = strlen(s);
for (int i = n - 1; i >= 0; i -= 4) {
int l = max(0, i - 3);
int segment = 0;
for (int j = l; j <= i; j++) segment = segment * 10 + (s[j] - '0');
b->digits[b->len++] = segment;
}
trim(b); // 去除高位前導零段
}
void toString(const BigInt *b, char *buf) {
if (b->len == 0) { strcpy(buf, "0"); return; }
char *p = buf;
if (b->sign == -1) *p++ = '-';
sprintf(p, "%d", b->digits[b->len - 1]); // 最高位不補零
p += strlen(p);
for (int i = b->len - 2; i >= 0; i--) {
sprintf(p, "%04d", b->digits[i]); // 低位補零到 4 位
p += 4;
}
*p = '\0';
}
len,再從高位段向低位段逐段比較。生產環境請直接使用成熟庫: