超长正整数的减法(C语言)

该程序实现了处理两个最长80位的超长正整数减法运算,考虑了高位为0的情况。输入两个整数,通过将字符串转换为整数数组进行计算,确保结果的高位不为0,输出时不包含前导0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题描述】
编写程序实现两个超长正整数(每个最长80位数字)的减法运算。
【输入形式】

从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
1. 第一行是超长正整数A;
2. 第二行是超长正整数B;
【输出形式】
输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。
 【输入样例】

234098
134098703578230056

【输出样例】

 -134098703577995958
#include<string.h>
#include<stdio.h>
int main()
{
	char arr1[100]="\0";
	char arr2[100]="\0";
	int  arr3[100]={0};	
	int i = 0;
	scanf("%s%s", &arr1, &arr2);//输入数据
	int m1 = strlen(arr1);//计算字符串长度
	int m2 = strlen(arr2);
	int j = 0;
	int count = 0;
	int Arr1[100] = { 0 };
	int Arr2[100] = { 0 };
	int max = m1 > m2 ? m1 : m2;
	for (i = 0; i < m1; i++)Arr1[i] = arr1[i] - '0';//转化为整数
	for (i = 0; i < m2; i++)Arr2[i] = arr2[i] - '0';
	//减法操作
	if (m1 > m2 || (m1==m2&& (strcmp(arr1, arr2) > 0)))//保证相减后的数大于零
		for (i = max - 1, j = m2 - 1; i >= 0; i--, j--)
			if (j >= 0)
			{
				arr3[i] += Arr1[i] - Arr2[j];
				if (arr3[i] < 0) { arr3[i] += 10; arr3[i - 1] = -1; }
			}
			else
			{
				arr3[i] += Arr1[i];
				if (arr3[i] < 0) { arr3[i] += 10; arr3[i - 1] = -1; }
			}
	else
		for (i = max - 1, j = m1 - 1; i >= 0; i--, j--)
			if (j >= 0)
			{
				arr3[i] += Arr2[i] - Arr1[j];
				if (arr3[i] < 0) { arr3[i] += 10; arr3[i - 1] = -1; }
			}
			else
			{
				arr3[i] += Arr2[i];
				if (arr3[i] < 0) { arr3[i] += 10; arr3[i - 1] = -1; }
			}
	if (m1 < m2 || (m1==m2&&strcmp(arr1, arr2) < 0))
				printf("-");
	i = 0;
	while (arr3[i] == 0)i++;//去除差前边的0
	for (i; i < max; i++)
	{
		count++;
		printf("%d", arr3[i]);
	}
	if (count == 0)
	{
		printf("0");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值