C++实现高精度减法

题目描述输入两个正整数数:a,b。

输出他们的差。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	string a,b; 
	cin>>a>>b;
	int s[5000];
	int len_a=a.length(), len_b=b.length(), len, k=0, m,n, tmp;
	// 判断 a 和 b 的大小,并使得 a 大于 b 
	if (a.length()<b.length() || a.length()==b.length() && a<b) {
		// a 和 b 值交换 
		swap(a,b);
		// a 和 b 长度交换 
		tmp = len_a;
		len_a = len_b;
		len_b = tmp;
		// 负数在输出的时候,需要补负号 
		cout<<"-";
	}
	// 循环要用大的长度循环,不然会导致 字符串 读取不完 
	len = len_a>len_b ? len_a : len_b;
	int t = 0;
	for (int i=len-1; i>=0; i--) {
		// 存储 a数组中的值 
		m = a[len_a-k-1] - '0'; 
		// 存储 b 数组中的值,超过b数组的长度,读取时,用 0 补齐 
		n=0; 
		if (len_b-1-k>=0) {
			n = b[len_b-1-k] - '0'; 
		} 
		// 减数小于被减数,需要找前一位借10,因此 前一位 需要 减掉 1 
		if (m < n) {
			a[len_a-1-k-1] -= 1; // 表示 前一位 位 借 10 给后一位 
			m += 10;
		}
		s[k] =  m - n;
		k++;
	}
	// 去掉多余的 0 
	int max = len + 1;
	while (s[max] == 0 && max>0) {
		max--;
	}
	for (int i = max; i >= 0; i--) {
		cout<<s[i];
	}  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值