1.8 无符号大数加、减运算。程序设计中经常遇到无符号大数加、减运算问题,请在样例程序Ex1.4基础上实现无符号大数减运算。题目要求输入两个无符号大数,保证一个大数不小于第二个大数,输出它们的和、差。c语言实现。
时间: 2024-03-27 09:35:37 浏览: 49
以下是无符号大数加、减运算的C语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
// 两个大数相加
char* big_num_add(char* s1, char* s2) {
char* res = new char[MAX_LEN + 1];
memset(res, '0', MAX_LEN + 1);
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = len1 > len2 ? len1 : len2;
int carry = 0;
int i = len1 - 1;
int j = len2 - 1;
int k = len - 1;
while (i >= 0 && j >= 0) {
int sum = (s1[i] - '0') + (s2[j] - '0') + carry;
res[k--] = sum % 10 + '0';
carry = sum / 10;
i--;
j--;
}
while (i >= 0) {
int sum = (s1[i] - '0') + carry;
res[k--] = sum % 10 + '0';
carry = sum / 10;
i--;
}
while (j >= 0) {
int sum = (s2[j] - '0') + carry;
res[k--] = sum % 10 + '0';
carry = sum / 10;
j--;
}
if (carry != 0) {
res[k--] = carry + '0';
}
if (res[0] == '0') {
return res + 1;
}
return res;
}
// 两个大数相减
char* big_num_sub(char* s1, char* s2) {
char* res = new char[MAX_LEN + 1];
memset(res, '0', MAX_LEN + 1);
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = len1 > len2 ? len1 : len2;
int borrow = 0;
int i = len1 - 1;
int j = len2 - 1;
int k = len - 1;
while (i >= 0 && j >= 0) {
int diff = (s1[i] - '0') - (s2[j] - '0') - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
res[k--] = diff + '0';
i--;
j--;
}
while (i >= 0) {
int diff = (s1[i] - '0') - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
res[k--] = diff + '0';
i--;
}
if (res[0] == '0') {
return res + 1;
}
return res;
}
int main() {
char s1[MAX_LEN + 1], s2[MAX_LEN + 1];
scanf("%s %s", s1, s2);
char* sum = big_num_add(s1, s2);
printf("Sum: %s\n", sum);
delete[] sum;
char* diff = big_num_sub(s1, s2);
printf("Diff: %s\n", diff);
delete[] diff;
return 0;
}
```
注意,在实现无符号大数减法时,需要保证被减数不小于减数。如果被减数小于减数,可以交换两个数的位置,然后输出负号作为差的符号。
相关推荐
![](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)
![](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)
![](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)
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)