用c语言编写【问题描述】 编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。 1. 第一行是超长正整数A; 2. 第二行是超长正整数B; 【输出形式】 输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。 【输入样例】 234098 134098703578230056 【输出样例】 -134098703577995958 【样例说明】 进行两个正整数减法运算, 234098 -134098703578230056 = -134098703577995958。
时间: 2023-07-16 17:17:08 浏览: 118
C语言:超长正整数的减法
好的,根据您的要求,这是用 C 语言编写超长正整数减法的代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 81
int main()
{
char num1[MAX_LEN], num2[MAX_LEN];
scanf("%s %s", num1, num2);
int len1 = strlen(num1), len2 = strlen(num2);
int len = len1 > len2 ? len1 : len2; // 求出两个数中最长的长度
int a[MAX_LEN], b[MAX_LEN], c[MAX_LEN]; // 数组存储数值,a存储num1,b存储num2,c存储结果
memset(a, 0, sizeof(a)); // 初始化为0
memset(b, 0, sizeof(b)); // 初始化为0
memset(c, 0, sizeof(c)); // 初始化为0
// 将输入的字符串转换成数值存储到数组中
for (int i = 0; i < len1; i++) {
a[len1 - 1 - i] = num1[i] - '0';
}
for (int i = 0; i < len2; i++) {
b[len2 - 1 - i] = num2[i] - '0';
}
// 实现减法
for (int i = 0; i < len; i++) {
int tmp = a[i] - b[i] - c[i];
if (tmp < 0) {
c[i + 1]++;
tmp += 10;
}
c[i] = tmp;
}
// 输出结果
int flag = 0;
for (int i = len - 1; i >= 0; i--) {
if (flag || c[i]) { // 从最高位开始输出,直到遇到第一个非0数字
printf("%d", c[i]);
flag = 1;
}
}
if (!flag) printf("0"); // 特判结果为0的情况
printf("\n");
return 0;
}
```
注意:此代码假设输入的两个数都是正整数,没有考虑其中一个或两个数为负数的情况。
阅读全文