首页 > 其他分享 >【模版】高精度减法 (A - B problem)

【模版】高精度减法 (A - B problem)

时间:2023-12-25 16:45:47浏览次数:29  
标签:string 高精度 int 模版 MAXN 字符串 problem 减法 size

直接看代码和注释吧qwq高精度就是模拟嘛ww

还是python好,自带高精度

#include<bits/stdc++.h>
#define MAXN 10500 

using namespace std;

string a, b;
//选择字符串。因为字符串储存了每个串的长度,可以直接调用。
int na[MAXN], nb[MAXN], ans[MAXN]; 
bool pd;

int main()
{
    cin >> a >> b;
	if((a < b && a.size() == b.size()) || a.size() < b.size())
	{
		swap(a, b);
		pd = true; //判断a-b为负数的情况,其实也就是转化为-(b-a)
	}
    for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
    for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';
    //将字符串中的信息转化到数组中,数组模拟数字。 
    int maxl = max(a.size(), b.size());
    //找到两个数中的最大位,为for循环服务 
	for(int i = 1; i <= maxl; i ++)
	{
		if(na[i] < nb[i])
		{
			na[i + 1] --; //模拟借位
			na[i] += 10;
		}
		ans[i] = na[i] - nb[i];
	}
	
	while(ans[maxl] == 0)maxl --;//防止减后降位,多输出若干0 
	
	if(pd == true)cout << "-";//b>a时,a - b < 0 所以打上负号 
	
	for(int i = maxl; i > 0; i --)cout << ans[i];
	if(maxl < 1)cout << "0";。//相减等于0的情况
    return 0;
}

 

这里需要一提的是判断 b>a的方法。很显然,这里a,b都是字符串string型。为什么要这么写?

这里涉及字典序的比较大小方式。string类型不是不能比大小,而是规则上有所不同

粗略地概括一下:

从最高位比起,ASCII码更大的字符串更大。如果相等,比次高位,以此向下类推。

所以在string中,串 9>89 。因为最高位9>8

当然,像前面几个数如果都相等,位数更大的显然更大。

例如1234500>12345

所以说:在位数相等的时候,我们可以直接利用字符串比大小的性质,来比较两数大小,但又要防止出现 9>89这种情况,所以还要保证位数大的数值才更大

 

标签:string,高精度,int,模版,MAXN,字符串,problem,减法,size
From: https://www.cnblogs.com/Yukie/p/17926387.html

相关文章

  • 【模版】高精度乘法 (A*B problem)
    和A+Bproblem类似,不多说,直接看代码和注释就好啦!ww感觉这东西只要有个概念就行了...就是在练模拟?www其他语言似乎有大数加减乘除? 这样的高精度算法时间复杂度O(n2),n是数字位数,如果位数过大还是很慢。可以利用快速傅里叶变换的方式加速高精度乘法。(虽然都是我连傅里叶级数都没学......
  • 【模版】高精度加法
    原理模拟小学的列竖式计算,因为有些数字的大小在C++没法用基本数据类型存下,故需要高精度算法。高精度计算一般用到数组。把输入的数字倒着存就可以实现竖式计算里面向右对齐。最后再判断进位,输出时最高位特判即可。#include<iostream>usingnamespacestd;constintN=100......
  • CodeForces 1909F2 Small Permutation Problem (Hard Version)
    洛谷传送门CF传送门感觉这个题还是挺不错的。考虑F1。考察\(a_i\)差分后的意义,发现\(a_i-a_{i-1}\)就是\((\sum\limits_{j=1}^{i-1}[p_j=i])+p_i\lei\)。考虑将其转化为棋盘问题。在\((i,p_i)\)放一个车,那么\(a_i-a_{i-1}\)就是\((1,i)\sim......
  • kaggle Open Problems – Single-Cell Perturbations 1st & 2nd place solution summa
    Leaderboard:https://www.kaggle.com/competitions/open-problems-single-cell-perturbations/leaderboard2ndSolution:https://www.kaggle.com/competitions/open-problems-single-cell-perturbations/discussion/458738Code:https://github.com/Eliorkalfon/single_ce......
  • [问题记录] C# 使用NPOI操作Excel模版写入数据 - 生成文件打开时提示 "发现 XXX.xlsx
    解决方案:1.先确保原来的模版文件打开是正常的,没有提示要恢复2.用Office打开这个模版文件,另存为一个文件。用这个文件来作为模版使用。 问题描述:使用C#NPOI操作Excel模版(模版用office打开是正常的),写入数据,导出的文件打开时提示是否尝试恢复,点击“是”后,发现Excel内......
  • 【模版】差分
    问题引入:洛谷P2367班上一共n个学生,语文老师需要对成绩进行p次修改,每次修改需要给第x个学生到第y个学生每个人增加z分,语文老师想知道修改成绩后的最低分。对于$40\%$的数据,有$n\le10^3$。对于$60\%$的数据,有$n\le10^4$。对于$80\%$的数据,有$n\le10^5$。对于......
  • 【模版】前缀和
    问题引入:【洛谷P8218】##题目描述给定$n$个正整数组成的数列$a_1,a_2,\cdots,a_n$和$m$个区间$[l_i,r_i]$,分别求这$m$个区间的区间和。对于所有测试数据,$n,m\le10^5,a_i\le10^4$ 最朴素的想法,就是对于每次询问,我们都用for循环进行$[l_i,r_i]$区间的求和,不难......
  • P5091 【模版】扩展欧拉定理
    求\(a^b\bmodm,b\le10^{200000}\)。首先引入三种可以通过取模缩小幂指数的方法。费马小定理:当\(a,p\in\mathbb{Z},\spacep\)为质数且\(p\nmida\)时,\(a^{p-1}\equiv1(\bmod\spacep)\),所以有\(a^b\equiva^{b\bmod(p-1)}(\bmod\spacep)\);欧拉定理:当\(a,m\in\m......
  • 【模版】冒泡排序
    刚学C++时书上就会写这个qwq属于最简单的排序算法惹。算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对......
  • 【模版】选择排序
    选择排序(Selectionsort)是一种简单直观的排序算法。1.基本思想首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的思想其实和冒泡排序有点类似,都......