大整数减法

本篇介绍大整数相减(两个正数相减)
与大整数加法运算相比,减法运算稍微复杂了些,因为要考虑当结果为负数时候的情况。根据减法运算法则可以得出两个整数相减为正数的情况。这样想来,只需要在两个正的大整数相减前比较大小即可得出另外一种情况。

例:

  • 11 - 20 = - ( 20 - 11)只需算出 20 - 11 即可获得答案
  • 为了确定最终结果得符号(+ / -),需要比较两个数得大小

所以最终功能的实现由以下部分组成:

  1. 逆序存放数字(对齐整数的个位,便于计算)
  2. 判断两个整数大小(确定最终结果为正数还是负数)
  3. 用数组计算结果
  4. 根据两个整数的大小输出结果
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void swap(int a[], int len_a, int b[], int len_b)
{
	int MAX = max(len_a, len_b);
	for (int i = 0; i < MAX; i++)
	{
		swap(a[i], b[i]);
	}
}
int main()
{
	int a[1001] = { 0 };
	int b[1001] = { 0 };

	string A, B;
	cin >> A >> B;

	int len1, len2;
	len1 = A.length();
	len2 = B.length();
	int flag = 0;//标记输出结果为正或是负

	for (int i = len1 - 1, k = 0; i != -1; i--)//逆序存放
	{
		a[k] = A[i] - '0';
		k++;
	}

	for (int i = len2 - 1, k = 0; i != -1; i--)
	{
		b[k] = B[i] - '0';
		k++;
	}
	
	if (len1 < len2)//比较大小
	{
		flag = 1;
		swap(a, len1, b, len2);
		swap(len1, len2);
	}
	else if (len1 == len2)
	{
		for (int i = len1 - 1; i >= 0; i--)
		{
			if (a[i] == b[i])
				continue;
			else if (a[i] > b[i])
				break;
			else
			{
				flag = 1;
				swap(a, len1, b, len2);
				swap(len1, len2);
				break;
			}
		}
	}
	
	int down = 0,max = len1 >= len2 ? len1 : len2;
	for (int i = 0; i < max; i++)//模拟减法
	{
		a[i] =a[i] - b[i] - down;
		down = 0;
		if (a[i] < 0)
		{
			down = 1;
			a[i] += 10;
		}
	}
	
	if (flag)
	{
		cout << "-";
	}
	
	int i;
	for (i = max - 1; a[i] == 0; i--);//忽略空格
	for (;i >= 0; i--)
	{
		cout << a[i];
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值