首页 > 编程语言 >算法基础之高精度总结

算法基础之高精度总结

时间:2023-09-23 16:22:54浏览次数:30  
标签:总结 高精度 int 高位 back 处理 算法 除法

高精度算法分类

分类:加、减、乘、除

其中加减乘都适用于两个数都是高精度,除法因为除数是高精度的话不好用整除的方法,所以除法时被除数是高精度,除数是整型。

高精度加减乘除的异同点

加和乘

相同点

  1. 需要从低位到高位处理
for(int i=stra.size()-1;i>=0;i--) c.push_back(stra[i]-'0');
  1. 加和乘处理向上进位
int t=0;
for(...){
 t += a[i];
 c.push_back(t % 10);
 t /= 10;
}
  1. 可以使用通用模板

加法

c[i]+=a[i];
c[i]+=b[i];
//然后统一对c进行进位处理

乘法

c[i+j] = a[i]*b[j];
//然后统一对c进行进位处理

减和除

相同点

  1. 有可能当前位的数不够,需要借用上一位

不同点

  1. 减法需要从低位到高位处理,除法是从高位到低位处理

  2. 减法每一位都要处理上一位的借位情况,借位要么是0要么是1

int t=0;
//注意:a是从低位到高位排序
for(int i=0;i<a.size();i++){
 t = a[i]-t;
 if(i<b.size()) t -= b[i];
 c.push_back(t % 10);

 //下一位的借位
 if(t <0) t=1;
 else t = 0;

}
  1. 除法更多的应该是叫凑位,把高位的数*10和低位的数合并,每个位置不需要再单独加减
int r=0; //余数
//注意a是从高位到低位排序
for(int i=0;i<a.size();i++){
  r = r * 10+a[i];
  c.push_back(r /b);
     r = r % b;
}

4.除法处理前导0的情况需要翻转,把高位翻转到末尾

reverse(c.begin(),c.end());

处理前导0的方式

四种运算都一样,只是除法先要翻转数组

while(c.size()>1 && c.back()==0) c.pop_back();

本文由mdnice多平台发布

标签:总结,高精度,int,高位,back,处理,算法,除法
From: https://www.cnblogs.com/zhaodong462502/p/17724552.html

相关文章

  • 9.23总结
    代码时间(包括上课):4h代码量(行):360今天学习了Java,针对算法与数据结构进行了学习,今天我做了两道算法题,并且学习了基本查找,二分查找,还有二分查找的升级版,以及插值查找及其升级版,还有冒泡排序和选择排序,具体可以看我其他博客。......
  • 算法基础之二分查找
    原题链接二分查找中的mid+1和mid-1的问题二分查找中的边界问题处理不好很容易导致死循环和计算错误的问题,以题目数的范围为例。题目大意​二分查找重复数第一次出现的位置和最后一次出现的位置。数学含义​第一次位置即找到一个长度最大的>=X区间的左边界​最......
  • 那些打工人的总结吧!
    今天是2023年9月23日秋分杭州亚运会的开幕式濒临国庆假期的周六Like那些研究生的总结吧,打工人也要开始有一点产出。我是一个安安静静的码字员,并且越来越喜欢码字。但是关于这篇的板块分类,我还没有完全弄清楚,所以还是按照以下几大板块。关于成长1、如果你觉得身边的人对你向......
  • 深度学习算法中的参数共享(Parameter Sharing)
    引言在深度学习算法中,参数共享(ParameterSharing)是一种重要的技术,它通过共享模型的参数来减少模型的复杂度,并提升模型的性能和泛化能力。本文将介绍参数共享的概念、原理以及在深度学习算法中的应用。参数共享的概念参数共享指的是在模型的不同部分使用相同的参数。在传统的机器学......
  • 动态规划 题单总结
    目录P7339『MdOIR4』KotoriP2167[SDOI2009]Bill的挑战P4206[NOI2005]聪聪与可可P4377[USACO18OPEN]TalentShowGP4766[CERC2014]OuterspaceinvadersP8564ρars/eyP7339『MdOIR4』Kotori考虑直接思考对于分成\(\frac{n}{2}\)组构成的所有的树。很显然这是一颗完......
  • 算法训练day8 LeetCode 344
    算法训练day8:LeetCode344.541.151.剑指offer05.58.344.反转字符串题目344.反转字符串-力扣(LeetCode)题解代码随想录(programmercarl.com)classSolution{public:voidreverseString(vector<char>&s){for(inti=0,j=s.size()-1;i......
  • 算法题——定义一个方法自己实现 toBinaryString 方法的效果,将一个十进制整数转成字符
    用除基取余法,不断地除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。privatestaticStringtoBinaryString(intnumber){StringBuildersb=newStringBuilder();while(true){if(number==0)break;intyushu=num......
  • 常用算法模版
    常用算法模版今天学会在https://godbolt.org/看汇编了。顺便卡了下常数,以及简单的(不是)压行。快读signedread(){signednum=0,flag=1;charch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')flag=-1;for(;isdigit(ch);ch=g......
  • 算法题——实现类似parseInt的方法
    Scannersc=newScanner(System.in);Stringstr="";while(true){System.out.println("请输入");Stringstr1=sc.nextLine();if(str1.length()<1||str1.length()>10||str1.charAt(0)=='0'){System.out.......
  • 【算法】哈希表
    1哈希表理论基础1.1哈希表哈希表是根据关键码的值而直接进行访问的数据结构。一般哈希表都是用来快速判断一个元素是否出现集合里。1.2哈希函数哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值。如果ha......