在日常编程中,我们经常需要处理超出标准数据类型(如 int、long long)表示范围的数字。例如,计算 100!(100 的阶乘)或两个 1000 位整数相加。这时就需要用到C语言大整数运算技术,也称为高精度计算。
本文将手把手教你如何用 C 语言实现基本的大整数加法、减法和乘法,即使你是编程小白,也能轻松理解并上手实践。

C 语言中的 int 通常为 32 位(最大约 21 亿),long long 为 64 位(最大约 9×10¹⁸)。但当我们要处理像“斐波那契数列第 10000 项”或“RSA 加密中的大素数”时,这些类型远远不够。因此,我们需要用数组或字符串来模拟大数,并手动实现四则运算逻辑——这就是C语言高精度计算的核心思想。
我们将一个大整数的每一位数字存入数组。为了方便进位处理,通常采用低位在前、高位在后的存储方式。例如,数字 12345 可以表示为:
digits[0] = 5 // 个位digits[1] = 4 // 十位digits[2] = 3 // 百位digits[3] = 2 // 千位digits[4] = 1 // 万位加法是最基础的操作。我们逐位相加,并处理进位。
#include <stdio.h>#include <string.h>#define MAX_DIGITS 1000 // 支持最多1000位void add(char *a, char *b, char *result) { int len_a = strlen(a), len_b = strlen(b); int num_a[MAX_DIGITS] = {0}, num_b[MAX_DIGITS] = {0}; int res[MAX_DIGITS] = {0}; // 将字符串转为逆序数字数组(低位在前) for (int i = 0; i < len_a; i++) num_a[i] = a[len_a - 1 - i] - '0'; for (int i = 0; i < len_b; i++) num_b[i] = b[len_b - 1 - i] - '0'; int carry = 0, max_len = (len_a > len_b ? len_a : len_b); for (int i = 0; i < max_len || carry; i++) { int sum = num_a[i] + num_b[i] + carry; res[i] = sum % 10; carry = sum / 10; } // 转回字符串(高位在前) int idx = 0; for (int i = MAX_DIGITS - 1; i >= 0; i--) { if (res[i] != 0 || idx > 0) { result[idx++] = res[i] + '0'; } } if (idx == 0) result[idx++] = '0'; result[idx] = '\0';}int main() { char a[] = "99999999999999999999"; char b[] = "1"; char result[MAX_DIGITS]; add(a, b, result); printf("%s + %s = %s\n", a, b, result); return 0;}减法需注意借位和结果正负。为简化,我们假设被减数 ≥ 减数。
void subtract(char *a, char *b, char *result) { int len_a = strlen(a), len_b = strlen(b); int num_a[MAX_DIGITS] = {0}, num_b[MAX_DIGITS] = {0}; int res[MAX_DIGITS] = {0}; for (int i = 0; i < len_a; i++) num_a[i] = a[len_a - 1 - i] - '0'; for (int i = 0; i < len_b; i++) num_b[i] = b[len_b - 1 - i] - '0'; for (int i = 0; i < len_a; i++) { if (num_a[i] < num_b[i]) { num_a[i] += 10; num_a[i + 1]--; } res[i] = num_a[i] - num_b[i]; } // 去除前导零并转为字符串 int idx = 0; for (int i = len_a - 1; i >= 0; i--) { if (res[i] != 0 || idx > 0) { result[idx++] = res[i] + '0'; } } if (idx == 0) result[idx++] = '0'; result[idx] = '\0';}乘法可看作多次加法,但更高效的方式是模拟竖式乘法。
void multiply(char *a, char *b, char *result) { int len_a = strlen(a), len_b = strlen(b); int num_a[MAX_DIGITS] = {0}, num_b[MAX_DIGITS] = {0}; int res[MAX_DIGITS * 2] = {0}; for (int i = 0; i < len_a; i++) num_a[i] = a[len_a - 1 - i] - '0'; for (int i = 0; i < len_b; i++) num_b[i] = b[len_b - 1 - i] - '0'; for (int i = 0; i < len_a; i++) { for (int j = 0; j < len_b; j++) { res[i + j] += num_a[i] * num_b[j]; res[i + j + 1] += res[i + j] / 10; res[i + j] %= 10; } } int idx = 0; int max_len = len_a + len_b; for (int i = max_len - 1; i >= 0; i--) { if (res[i] != 0 || idx > 0) { result[idx++] = res[i] + '0'; } } if (idx == 0) result[idx++] = '0'; result[idx] = '\0';}通过以上代码,你已经掌握了 C语言实现大整数 的基本方法。实际项目中,你可能还需要处理负数、除法、比较大小等操作。建议你:
掌握 大数加法减法乘法 是学习密码学、算法竞赛和高性能计算的重要基础。动手写一遍代码,你会对计算机如何处理数字有更深的理解!
希望这篇教程能帮你轻松入门 C 语言大整数运算。如有疑问,欢迎留言交流!
本文由主机测评网于2025-12-05发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123374.html