编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。 1. 第一行是超长正整数A; 2. 第二行是超长正整数B;
时间: 2023-04-01 19:04:15 浏览: 208
编程实现大整数(128字长)的加、减运算。使得可以实现两个操作数的键盘输入和最终结果的输出。
我可以回答这个问题。以下是程序实现两个超长正整数的减法运算的代码:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 81
int main() {
char a[MAX_LEN], b[MAX_LEN], result[MAX_LEN];
int len_a, len_b, len_result, i, j, borrow;
// 读入两个超长正整数
scanf("%s%s", a, b);
// 去掉高位的
len_a = strlen(a);
while (a[] == '' && len_a > 1) {
len_a--;
for (i = ; i < len_a; i++) {
a[i] = a[i+1];
}
}
len_b = strlen(b);
while (b[] == '' && len_b > 1) {
len_b--;
for (i = ; i < len_b; i++) {
b[i] = b[i+1];
}
}
// 对齐两个数的位数
if (len_a > len_b) {
len_result = len_a;
for (i = len_b; i >= ; i--) {
b[i+len_a-len_b] = b[i];
}
for (i = ; i < len_a-len_b; i++) {
b[i] = '';
}
} else {
len_result = len_b;
for (i = len_a; i >= ; i--) {
a[i+len_b-len_a] = a[i];
}
for (i = ; i < len_b-len_a; i++) {
a[i] = '';
}
}
// 逐位相减
borrow = ;
for (i = len_result-1; i >= ; i--) {
result[i] = a[i] - b[i] - borrow;
if (result[i] < ) {
result[i] += 10;
borrow = 1;
} else {
borrow = ;
}
}
// 输出结果
for (i = ; i < len_result; i++) {
if (result[i] != || i == len_result-1) {
for (j = i; j < len_result; j++) {
printf("%d", result[j]);
}
printf("\n");
break;
}
}
return ;
}
阅读全文