首页 > 其他分享 >5.Acwing基础课第792题-简单-高精度减法

5.Acwing基础课第792题-简单-高精度减法

时间:2023-08-22 18:35:58浏览次数:26  
标签:return 792 int back -- vector 基础课 Acwing size

5.Acwing基础课第792题-简单-高精度减法

题目描述

给定两个正整数(不含前导0),计算它们的差,计算结果可能为负数。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤100000

输入样例

32
11

输出样例

21

思路解析:

算法:

时间复杂度:*O(nlog(n))*

解题思路:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
using namespace std;

const int N = 1e6 + 10;

//A >= B
bool cmp(vector<int>& A, vector<int>& B)
{
	if (A.size() != B.size()) return A.size() > B.size();
	//从高位开始比
	for (int i = A.size() - 1; i >= 0; i--)
		if (A[i] != B[i])
			return A[i] > B[i];

	return true;
}

//A - B
vector<int> sub(vector<int>& A, vector<int>& B)
{
	vector<int> C;

	int t = 0;
	//先处理低位
	for (int i = 0; i < A.size(); i++)
	{
		t = A[i] - t;//A[i]减去之前的借位
		if (i < B.size()) t -= B[i];
		C.push_back((t + 10) % 10);//C先将低位存入
		if (t < 0) t = 1;//有借位
		else t = 0;//无借位
	}

	if (C.size() > 1 && C.back() == 0) C.pop_back();

	return C;
}

int main()
{
	string a, b;
	vector<int> A, B;

	cin >> a >> b;
	for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
	for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');

	if (cmp(A, B))
	{
		auto C = sub(A, B);

		for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
	}
	else
	{
		auto C = sub(B, A);

		for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
	}

	system("pause");
	return EXIT_SUCCESS;
}

标签:return,792,int,back,--,vector,基础课,Acwing,size
From: https://www.cnblogs.com/codemagiciant/p/17649380.html

相关文章

  • 4.Acwing基础课第791题-简单-高精度加法
    4.Acwing基础课第791题-简单-高精度加法题目描述给定两个正整数(不含前导0),计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例1223输入样例35思路解析:算法:时间复杂度:*O(nlog(n))*解题思路:代码:......
  • 7.Acwing基础课第794题-简单-高精度除法
    7.Acwing基础课第794题-简单-高精度除法题目描述给定两个非负整数(不含前导0)A,B,请你计算A/B的商和余数。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共两行,第一行输出所求的商,第二行输出所求余数。数据范围1≤A的长度≤100000,1≤B≤10000,B一定不为......
  • 6.Acwing基础课第793题-简单-高精度乘法
    6.Acwing基础课第793题-简单-高精度乘法题目描述给定两个非负整数(不含前导0)A和B,请你计算A×B的值。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共一行,包含A×B的值。数据范围1≤A的长度≤100000,0≤B≤10000输入样例23输出样例6思路解析:......
  • 1.Acwing基础课第785题-简单-快速排序
    1.Acwing基础课第785题-简单-快速排序题目描述给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数n。第二行包含n个整数(所有整数均在1~范围内),表示整个数列。输出格式输......
  • AcWing 867. 分解质因数
    题目给定$n$个正整数$a_i$,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。输入格式第一行包含整数$n$。接下来$n$行,每行包含一个正整数$a_i$。输出格式对于每个正整数$a_i$,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,......
  • AcWing 866. 试除法判定质数
    题目给定$n$个正整数$a_i$,判定每个数是否是质数。输入格式第一行包含整数$n$。接下来$n$行,每行包含一个正整数$a_i$。输出格式共$n$行,其中第$i$行输出第$i$个正整数$a_i$是否为质数,是则输出Yes,否则输出No。数据范围$1≤n≤100,1≤a_i≤2^{31}−1$......
  • Acwing 第117场周赛
    Acwing第117场周赛这次的题比较简单,但是在做第二题的时候有地方一开始没有想到,导致想的比较简单,提交错了两次,下次要彻底思考清楚再提交A题题意:给定一个正整数n,请你计算一共有多少个正整数数对(a,b)同时满足:a>ba+b=n输入格式第一行包含整数T,表示共有T组测试数据。每......
  • AcWing 861. 二分图的最大匹配
    题目给定一个二分图,其中左半部包含$n_1$个点(编号$1∼n_1$),右半部包含$n_2$个点(编号$1∼n_2$),二分图共包含$m$条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图$G$,在$G$的一个子图$M$中,$M$的边集......
  • Acwing 197 阶乘分解
    我觉得都不用过多解释,看代码就懂了#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e6+10;intread(){ intx=0; chars=getchar(); while(s<'0'||s>'9') { s=getchar(); } while(s>='0'&&......
  • AcWing 860. 染色法判定二分图
    题目给定一个$n$个点$m$条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数$n$和$m$。接下来$m$行,每行包含两个整数$u$和$v$,表示点$u$和点$v$之间存在一条边。输出格式如果给定图是二分图,则输出Yes,否则输出No......