1.8 无符号大数加、减运算。程序设计中经常遇到无符号大数加、减运算问题,请在样例程序Ex1.4基础上实现无符号大数减运算。题目要求输入两个无符号大数,保证一个大数不小于第二个大数,输出它们的和、差。c语言代码
时间: 2024-03-13 14:42:29 浏览: 160
从外部输入4个无符号数,将前两个数相加,和存入内存30H单元;后两个数相减,差存入内存31H单元。并将两个结果分别输出。
5星 · 资源好评率100%
以下是用C语言实现无符号大数加、减运算的代码。实现时,将每个大数存储在一个数组中,数组中的每个元素表示该位上的数字。加法和减法的实现方法略有不同,具体见代码注释。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 数组最大长度
// 将字符串转换为无符号大数
void strToBigInt(char str[], int a[]) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
a[len - 1 - i] = str[i] - '0'; // 将数字字符转换为数字并存入数组中
}
}
// 输出无符号大数
void printBigInt(int a[]) {
int i = MAX_LEN - 1;
while (i > 0 && a[i] == 0) { // 去掉前导0
i--;
}
while (i >= 0) {
printf("%d", a[i--]);
}
printf("\n");
}
// 无符号大数加法
void add(int a[], int b[], int c[]) {
int carry = 0; // 进位
for (int i = 0; i < MAX_LEN; i++) {
int sum = a[i] + b[i] + carry;
c[i] = sum % 10;
carry = sum / 10;
}
}
// 无符号大数减法
void subtract(int a[], int b[], int c[]) {
int borrow = 0; // 借位
for (int i = 0; i < MAX_LEN; i++) {
int diff = a[i] - b[i] - borrow;
if (diff < 0) {
c[i] = diff + 10;
borrow = 1;
} else {
c[i] = diff;
borrow = 0;
}
}
}
int main() {
char str1[MAX_LEN], str2[MAX_LEN];
int a[MAX_LEN] = {0}, b[MAX_LEN] = {0}, sum[MAX_LEN] = {0}, diff[MAX_LEN] = {0};
printf("请输入第一个无符号大数:");
scanf("%s", str1);
printf("请输入第二个无符号大数:");
scanf("%s", str2);
strToBigInt(str1, a);
strToBigInt(str2, b);
add(a, b, sum); // 无符号大数加法
printf("它们的和为:");
printBigInt(sum);
subtract(a, b, diff); // 无符号大数减法
printf("它们的差为:");
printBigInt(diff);
return 0;
}
```
以上代码实现了无符号大数加、减运算,并按照题目要求输入两个无符号大数,输出它们的和、差。
阅读全文