C++写的,就是只有十分,没找到问题
查看原帖
C++写的,就是只有十分,没找到问题
1140371
ruanertanjing楼主2024/5/13 00:47
//P2142 高精度减法
//https://www.luogu.com.cn/problem/P2142

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <functional>
#include <climits>

#define quickio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"

using namespace std;
typedef long long ll;

int A[10088];
int B[10088];
int C[10088];
int len_a, len_b, len_c;

bool GetFlag(string a, string b)
{
	if (len_a != len_b)
		return len_b > len_a;
	for (int i = 0; i < len_a; i++)
	{
		if (a[len_a - 1 - i] < b[len_a - 1 - i])
			return true;
	}
	return false;
}

void Sub()
{
	for (int i = 0; i < len_c; i++)
	{
		C[i] += A[i] - B[i];
		if (C[i] < 0)
		{
			C[i] = A[i] + 10 - B[i];
			C[i + 1]--;
		}
	} 

	while (len_c > 1 && C[len_c - 1] == 0)
		len_c--;
}

int main()
{
	string a, b;
	cin >> a;
	cin >> b;
	len_a = a.size();
	len_b = b.size();
	len_c = max(len_a, len_b);

	for (int i = 0; i < len_a; i++)
	{
		A[len_a - 1 - i] = a[i] - '0';
	}

	for (int i = 0; i < len_b; i++)
	{
		B[len_b - 1 - i] = b[i] - '0';
	}

	int flag = 0;
	if (GetFlag(a, b))
	{
		flag = 1;
		swap(A, B);
		swap(len_a, len_b);
	}

	Sub();
	if (flag)
		cout << "-";
	for (int i = 0; i < len_c; i++)
	{
		cout << C[len_c - 1 - i];
	}
	cout << endl;
	return 0;
}
2024/5/13 00:47
加载中...