C语言大数减法代码详解
C语言实现大数减法
当需要进行超出基本数据类型表示范围的减法运算时,就需要使用大数减法。本文将为您提供一份C语言实现的大数减法代码,并附带详细的代码解释。
#include <stdio.h>
#include <string.h>
// 辅助函数:反转字符串
void reverse_string(char* str) {
int i = 0;
int j = strlen(str) - 1;
while (i < j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
i++;
j--;
}
}
// 大数减法函数
char* subtract_large_numbers(char* num1, char* num2) {
int length1 = strlen(num1);
int length2 = strlen(num2);
int max_length = (length1 > length2) ? length1 : length2;
int result[max_length + 1]; // 存储计算结果的数组
memset(result, 0, sizeof(result));
reverse_string(num1);
reverse_string(num2);
int carry = 0; // 初始化借位为0
// 从个位数开始逐位相减
for (int i = 0; i < max_length; i++) {
int digit1 = (i < length1) ? (num1[i] - '0') : 0;
int digit2 = (i < length2) ? (num2[i] - '0') : 0;
int diff = digit1 - digit2 - carry;
// 如果差值小于0,则需要向高位借位
if (diff < 0) {
diff += 10;
carry = 1; // 设置借位标志为1
} else {
carry = 0; // 清除借位标志
}
result[i] = diff;
}
// 清除结果中的前导零
int leading_zeros = 0;
for (int i = max_length - 1; i >= 0; i--) {
if (result[i] == 0) {
leading_zeros++;
} else {
break;
}
}
// 构造结果字符串
char* result_str = malloc((max_length - leading_zeros + 1) * sizeof(char));
for (int i = 0; i < max_length - leading_zeros; i++) {
result_str[i] = result[i] + '0';
}
result_str[max_length - leading_zeros] = '�';
reverse_string(result_str);
return result_str;
}
int main() {
char num1[] = '123456789';
char num2[] = '987654321';
char* result = subtract_large_numbers(num1, num2);
printf('Result: %s\n', result);
free(result);
return 0;
}
代码解释:
-
reverse_string(char* str)函数:- 接受一个字符串作为参数,并将其反转。
- 使用两个指针
i和j分别指向字符串的开头和结尾,逐个交换字符,直到i和j交叉。
-
subtract_large_numbers(char* num1, char* num2)函数:- 接受两个表示大数的字符串作为参数,返回它们的差值。
- 首先,计算两个字符串的长度,并取最大长度作为结果数组
result的大小。 - 然后,反转两个字符串,以便从个位数开始进行减法运算。
- 定义一个
carry变量来存储借位信息,初始化为0。 - 使用一个循环从个位数开始逐位相减,并将每一位的差值存储在
result数组中。- 如果某一位的差值小于0,则需要向高位借位,并将
carry设置为1。 - 否则,将
carry清除为0。
- 如果某一位的差值小于0,则需要向高位借位,并将
- 计算完成后,清除结果数组中的前导零。
- 最后,将结果数组转换为字符串,并反转字符串使其恢复正常顺序。
-
main()函数:- 定义两个字符串
num1和num2,分别表示要进行减法运算的两个大数。 - 调用
subtract_large_numbers函数进行减法计算,并将结果存储在result指针中。 - 打印结果字符串
result。 - 释放
result指针所指向的内存空间。
- 定义两个字符串
示例:
在 main 函数中,我们定义了两个大数 num1 = '123456789' 和 num2 = '987654321'。
程序运行后,将输出以下结果:
Result: -864197532
这表明 num1 减去 num2 的结果为 -864197532。
原文地址: https://www.cveoy.top/t/topic/jrm 著作权归作者所有。请勿转载和采集!