首页 > 编程语言 >(算法)高精度运算

(算法)高精度运算

时间:2024-01-29 21:49:23浏览次数:27  
标签:10 运算 高精度 int res len 算法 ans

为什么要有高精度就是因为当数字长度很长的时候都超过了longlong了那么我们就可以通过开数组,集合等方式运算,其原理就是小学生的竖式运算,没想到一个竖式运算竟然可以这么恶,现在的算法已经折磨了后面的路不好走了……

先来搞一下+,-,*,/的高精度运算(都是高进度之间的运算),其实就是进位,取模,借位

加法的关键代码

for(int i=len1-1;i>=0;i--)
    {
        temp=str1[i]-'0'+str2[i]-'0'+cf;
        cf=temp/10;
        temp%=10;
        str=char(temp+'0')+str;
    }
    if(cf!=0)  str=char(cf+'0')+str;
    return str;

减法(得先判断哪一个更大,要大减小)减法会涉及借位当一个数小于一个数的时候:

  大数减小数

for (int i = 0; i < ans; i ++){
        if (a[i] < b[i]){
            a[i+1] -= 1; // 向前位借一位
            a[i] += 10;  // 后一位就得加10
        }c[i] = a[i] - b[i];  // 之后就是正常减法了
    }
    while (c[ans-1] == 0 && ans > 1)
        ans -= 1;//去除前面的0

  小数减大数就搞一个flag,然后用大数减小数,比如flag=1那么我们就知道这是一个负数

乘法:对于第i位和第j位相乘其贡献值在i+j-1位(当然这个i和j是我们生活中的位而不是数组中的索引,如果是索引从0开始就不一样)

for (int i = 0; i < str1.size(); i ++) {
	for (int j = 0; j < str2.size(); j ++) {
		c[i+j] += a[i] * b[j];
		c[i+j+1] += c[i+j] / 10;
		c[i+j] = c[i+j] % 10;
	}
}

除法:分两种高精除低精和高精除高精

高精除低精(逐位试商法)

for(i=len-1;i>=0;i--){ //核心计算 
		reminder=reminder*10+a[i]; //模拟竖式除法中的落位 
		ans[i]=reminder/b;
		reminder%=b;
	}

高精除高精:(减法模拟除法)

 

for(i=len_a-len_b;i>=0;i--){
		while(judge(a+i,b,len_b)){//当a可以被b减的时候一直进行,直到不能被减,即得到最终的商 
			ans[i]++; //记录a被b减的次数,即为除法的结果 
			for(j=0;j<=len_b-1;j++){//高精度减法的实现方法 
				if(a[i+j]<b[j]){
					a[i+j+1]--;
					a[i+j]+=10;
				}
				a[i+j]-=b[j];
			}
		}
	}

  

每个高精度运算最后输出去除0的时候一定要看运算后最大位数来判断长度并且要添加len>0因为有时候就是输出0

有了以上原理一些高精度运算就可以有其他的板子,比如集合啊七七八八的

//高精乘
void mul(vector<int>& A, int b)
{
	vector<int> res;
	int t = 0;
	for (int i = 0; i < A.size() || t; i++)
	{
		if (i < A.size()) t += A[i] * b;
		res.push_back(t % 10);
		t /= 10;
	}
	while (res.size() > 1 && !res.back()) res.pop_back();
	A = res;
}

  

标签:10,运算,高精度,int,res,len,算法,ans
From: https://www.cnblogs.com/sixsix666/p/17995114

相关文章

  • 如何评价搜索算法的好坏?多角度解析
    前言大家好,我是chowley,搜索算法无处不在,程序员中比较高级的算法工程师,也大多数是做搜推广方向的,今天我就简单讲解一下,如何评价搜索算法!评价搜索算法搜索算法影响着用户的搜索体验和信息获取效率。在评价搜索算法的好坏时,需要从多个角度综合考量。本文将从准确性、排序质量、响......
  • day27 代码随想录算法训练营 39. 组合总和
    题目:39.组合总和我的感悟:还是没太理解这个index和i的区别感觉要继续听继续做剪枝要进行排序,这题,我先理解到不剪枝的版本就行 代码示例:classSolution:defcombinationSum(self,candidates:List[int],target:int)->List[List[int]]:res=[]......
  • 传统Item-Based协同过滤推荐算法改进
    前言今天要读的论文为一篇于2009年10月15日发表在《计算机研究与发展》的一篇会议论文,论文针对只根据相似性无法找到准确可靠的最近邻这个问题,提出了结合项目近部等级与相似性求取最近邻的新方法;此外针对系统中新加入的项目,因为其上评分信息的匾乏,求得的最近邻往往是不准确的,为此......
  • 洛谷模拟与高精度题单
    先针对洛谷这个题单每一个来总结一下,后面专门写一个高精度的理解(题目直接取洛谷题单上看,很简单一眼出的就先不写了)1.乒乓球:根据输入的w和L来判断甲和乙获胜的次数(两种记分方式,11和21),需要注意的是只有当分差大于等于2的时候才输出否则需要一直加直到分差大于2;因为我们需要判......
  • 二分算法
    二分算法个人感想洛谷二分题单基本完成,发现二分确实是比较模板的方式解答题目,难点往往是寻找出答案的单调性和如何高效验证答案的正确性。二分个人感觉就是枚举的优化,在时间复杂度上的极大优化,有一种暴力的美.目前发现的不足对题目的理解太浅,有时很难看懂题目的意思,理解有问......
  • 视频汇聚平台智能边缘分析一体机算法分析人员吸烟告警
    在这个科技日新月异的时代,安全和健康已经成为了我们生活中不可忽视的话题。而在众多安全防范措施中,智能边缘分析一体机的出现,无疑为我们的生命财产安全增添了一份强有力的保障。今天,我要讲述的是一个关于智慧与安全的故事,它发生在智能边缘分析一体机算法分析平台上,一个能够精准检测......
  • 视频汇聚平台智能边缘分析一体机算法分析人员吸烟告警
    在这个科技日新月异的时代,安全和健康已经成为了我们生活中不可忽视的话题。而在众多安全防范措施中,智能边缘分析一体机的出现,无疑为我们的生命财产安全增添了一份强有力的保障。今天,我要讲述的是一个关于智慧与安全的故事,它发生在智能边缘分析一体机算法分析平台上,一个能够精准检......
  • 安防视频监控平台LntonAIServer视频算法分析平台算法检测明烟明火预警
    今天,我要讲述的是一个关于智慧与安全的故事,它发生在LntonAIServer视频算法分析平台上,一个能够精准检测明烟和明火预警的高科技平台。想象一下,当夜幕降临,城市的喧嚣渐渐平息,大多数人沉浸在甜美的梦乡时,LntonAIServer却在无声中坚守着它的岗位。它的眼睛不眨不闭,通过高......
  • Rabbit加密算法:保护数据隐私的新选择
    摘要:数据安全是当今信息时代的关键问题之一。为了保护敏感数据免受未经授权的访问和窃取,加密算法起到了至关重要的作用。本文将介绍Rabbit加密算法的优缺点,以及它如何解决现代加密中的一些问题。本文还将提供一个使用Java编写的完整示例,以帮助读者深入了解Rabbit加密算法的实......
  • 轮廓测长|轮廓仪高精度测量粗糙度
    现代工业制造领域中,为什么测量粗糙度至关重要?在现代工业制造领域中,测量粗糙度是一项非常重要的工作。因为粗糙度能够影响到工件的功能性能和外观质量。当我们制造机器零件或工具时,需要确保表面的光洁度能够满足设计要求。过高或过低的粗糙度都会对产品的使用性能产生负面影响。在......