写一个c语言代码,实现无符号大数加、减运算
时间: 2024-03-18 12:38:39 浏览: 104
好的,以下是一个简单的 C 语言实现无符号大数加、减运算的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
// 将字符串转换为大数
void str_to_num(char str[], int num[]) {
int i, len;
len = strlen(str);
for (i = 0; i < len; i++) {
num[i] = str[len - 1 - i] - '0';
}
}
// 将大数转换为字符串
void num_to_str(int num[], int len, char str[]) {
int i;
for (i = 0; i < len; i++) {
str[i] = num[len - 1 - i] + '0';
}
str[len] = '\0';
}
// 大数加法
void add(int num1[], int len1, int num2[], int len2, int res[], int *res_len) {
int i, carry = 0;
*res_len = len1 > len2 ? len1 : len2;
for (i = 0; i < *res_len; i++) {
res[i] = num1[i] + num2[i] + carry;
carry = res[i] / 10;
res[i] %= 10;
}
if (carry > 0) {
res[*res_len] = carry;
(*res_len)++;
}
}
// 大数减法
int sub(int num1[], int len1, int num2[], int len2, int res[], int *res_len) {
int i, borrow = 0;
*res_len = len1;
for (i = 0; i < len1; i++) {
res[i] = num1[i] - borrow - (i < len2 ? num2[i] : 0);
if (res[i] < 0) {
res[i] += 10;
borrow = 1;
} else {
borrow = 0;
}
}
while (*res_len > 1 && res[*res_len - 1] == 0) {
(*res_len)--;
}
return borrow;
}
int main() {
int num1[MAX_LEN], num2[MAX_LEN], res[MAX_LEN];
int len1, len2, res_len;
char str1[MAX_LEN + 1], str2[MAX_LEN + 1], op;
printf("请输入一个无符号大数和一个操作符(+ 或 -):\n");
scanf("%s %c %s", str1, &op, str2);
str_to_num(str1, num1);
str_to_num(str2, num2);
len1 = strlen(str1);
len2 = strlen(str2);
if (op == '+') {
add(num1, len1, num2, len2, res, &res_len);
} else if (op == '-') {
int borrow = sub(num1, len1, num2, len2, res, &res_len);
if (borrow) {
printf("Error: 结果为负数!\n");
return -1;
}
} else {
printf("Error: 不支持的操作符!\n");
return -1;
}
char res_str[MAX_LEN + 1];
num_to_str(res, res_len, res_str);
printf("结果为:%s\n", res_str);
return 0;
}
```
这个程序包括了三个函数:`str_to_num`、`add` 和 `sub`。`str_to_num` 函数接受一个字符串和一个整型数组作为参数,将字符串转换为整型数组表示的大数。`add` 函数实现了大数加法,接受两个整型数组和它们的长度作为参数,将它们相加得到结果存储在第三个整型数组中。`sub` 函数实现了大数减法,接受两个整型数组和它们的长度作为参数,将第一个整型数组减去第二个整型数组得到结果存储在第三个整型数组中。
在 `main` 函数中,我们首先从用户输入中获取两个无符号大数和一个操作符。然后调用 `str_to_num` 函数将字符串转换为整型数组,调用 `add` 或 `sub` 函数计算结果,最后调用 `num_to_str` 函数将结果转换为字符串并输出。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)