高精度算法模板

1.加法


string  a1, b1;
int a[5010], b[5010], c[5010];
signed main() {cin >> a1 >> b1;int len1 = a1.size();int len2 = b1.size();for (int i = 1; i <= len1; i++) {a[i] = a1[len1 - i] - '0';}for (int i = 1; i <= len2; i++) {b[i] = b1[len2 - i] - '0';}for (int i = 1; i <= max(len1, len2); i++) {c[i] += a[i] + b[i];c[i + 1] = c[i] / 10;c[i] %= 10;}if (c[max(len1, len2) + 1] != 0) cout << c[max(len1, len2) + 1];for (int i = max(len1, len2); i >= 1; i--) {cout << c[i];}return 0;
}

2.减法

#include<set>
#include<list>
#include<queue>
#include<math.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include <stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<sstream>
#include<stack>
#include <utility>
#include<map>
#include <vector>#define inf 0x3f3f3f3f
#define int long long
const int N =1e6 + 10;
//#include <bits/stdc++.h>
typedef long long ll;
#include<iostream>
using namespace std;//long long MAX(long long a, long long b) { return a < b ? b : a; }string  a1, b1;
int a[N], b[N], c[N];
bool cmp(string e1, string e2) {int len1 = e1.size();int len2 = e2.size();if (len1 > len2) return true;//e1比e2大else {for (int i = len1 - 1; i >= 0; i--) {if (e2[i] > e1[i]) return false;}}return true;//一样大
}
signed main() {cin >> a1 >> b1;int f = 0;if (!cmp(a1, b1)) {//b比a大swap(a1, b1);f = 1;}for (int i = 1; i <= a1.size(); i++) {a[i] = a1[a1.size() - i] - '0';}for (int i = 1; i <= b1.size(); i++) {b[i] = b1[b1.size() - i] - '0';}int cnt = 0;for (int i = 1; i <= max(a1.size(),b1.size()); i++) {if (a[i] < b[i]) {a[i] += 10;a[i + 1] -= 1;}c[i] = a[i] - b[i];}if (f) cout << "-";int lc = max(a1.size(), b1.size());while (c[lc] == 0 && lc > 1) lc--;//去除前导0for (int i = lc; i >= 1; i--) {cout << c[i];}return 0;
}

3.乘法

string  a1, b1;
int a[N], b[N], c[N];signed main() {cin >> a1 >> b1;int la = a1.size();int lb = b1.size();for (int i = 1; i <= la; i++) {a[i] = a1[a1.size() - i] - '0';}for (int i = 1; i <= lb; i++) {b[i] = b1[b1.size() - i] - '0';}int lc = la + lb;//乘积的最长长度for (int i = 1; i <= la; i++) {for (int j = 1; j <= lb; j++) {c[i + j - 1] += a[i] * b[j];c[i + j] += c[i + j - 1] / 10;c[i + j - 1] %= 10;}}while (lc > 1 && c[lc] == 0) lc--;for (int i = lc; i >= 1; i--) cout << c[i];return 0;
}

4.除法

高精度除以低精度

模拟试除法

#include<set>
#include<list>
#include<queue>
#include<math.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include <stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<sstream>
#include<stack>
#include <utility>
#include<map>
#include <vector>#define inf 0x3f3f3f3f
#define int long long
const int N =1e6 + 10;
//#include <bits/stdc++.h>
typedef long long ll;
#include<iostream>
using namespace std;//long long MAX(long long a, long long b) { return a < b ? b : a; }string  a1;
int a[N], b, c[N];signed main() {cin >> a1 >> b;int la = a1.size();for (int i = 1; i <= la; i++) {a[i] = a1[i - 1] - '0';}int cur = 0;//余数for (int i = 1; i <= la; i++) {c[i] = (cur * 10 + a[i]) / b;cur = (cur * 10 + a[i]) % b;}int lc = 1;while (c[lc] == 0 && lc < la) lc++;//最终的结果位数至少是1位数,所以lc不能大于lafor (int i = lc; i <= la; i++) cout << c[i];return 0;
}

高精度除以高精度

#include <cstdio>
#include <iostream>
#include <cstring>using namespace std;int a[50005], b[50005], c[50005], d;void init(int a[]) {char s[50005];cin >> s;a[0] = strlen(s);		// 字符串存储,表示位数	for (int i=1; i<=a[0]; i++) {a[i] = s[a[0]-i] - 48;	// 正序储存} 	
}void print(int a[]) {			if (a[0] == 0) {cout << 0 << endl;return;  // 位数为0,输出0}for (int i=a[0]; i>=1; i--) {cout << a[i];  // 输出函数}cout << endl;return;
} int compare(int a[], int b[]) {	if (a[0] > b[0]) {return 1; // 被减数大于减数} if (a[0] < b[0]) {return -1; // 被减数小于减数}for (int i=a[0]; i>=1; i--) {	if (a[i] > b[i]) {return 1;} if (a[i] < b[i]) {return -1;}   // 位数相同,找到第一位不同的进行比较} return 0;					
}void numcpy(int p[], int q[], int det) {for (int i=1; i<=p[0]; i++) {q[i+det-1] = p[i]; //复制p数组到q数组从det开始的地方}q[0] = p[0] + det - 1;
}void jian(int a[], int b[]) {		int flag = compare(a, b);		 if (flag == 0)  {					a[0] = 0;return;}if (flag == 1) {				for (int i=1; i<=a[0]; i++) {if (a[i] < b[i]) {			 a[i+1]--;			a[i] += 10;}a[i] -= b[i];}while (a[0]>0 && a[a[0]]==0) {a[0]--;					} return; }				 
}  // 高精减法void chugao(int a[], int b[], int c[]) {int tmp[50005];c[0] = a[0] - b[0] + 1;for (int i=c[0]; i>0; i--) {memset(tmp, 0, sizeof(tmp));	numcpy(b, tmp, i);// 清零while (compare(a, tmp) >= 0) {c[i]++;jian(a, tmp);	// 用减法模拟		} }while (c[0] > 0 && c[c[0]] == 0) {c[0]--;}return;
}int main() {memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));init(a);init(b);chugao(a,b,c);print(c);	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/124397.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 入门笔记

前言 国庆值班把假期拆了个稀碎, 正好不用去看人潮人海, 趁机会赶个晚集入门一下都火这么久的 React 前端技术. 话说其实 n 年前也了解过一丢丢来着, 当时看到一上来就用 JS 写 DOM 的套路直接就给吓退了, 扭头还去看 Vue 了&#x1f923;, 现在从市场份额 社区活度来看, 确实…

【题解 动态规划】 Colored Rectangles

题目描述&#xff1a; 分析&#xff1a; 乍一看我还以为是贪心&#xff01; 猫 想想感觉没问题 但是局部最优并不能保证全局最优 比如这组数据 19 19 19 19 20 20 20 20如果按照贪心的做法&#xff0c;答案是20*20*2 但是其实答案是19*20*4 因此这道题用贪心是不对的 于是我…

计算机网络(五):运输层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 运输层概述 之前所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信&#xff…

QGIS文章三——模拟风暴潮水淹

之前工作中处理过风暴潮的数据&#xff0c;也获取到了不同等级台风水淹的DEM数据&#xff0c;不过还是很好奇是怎么推演出来的&#xff0c;最近一段时间看QGIS比较多&#xff0c;加上看到了一篇文章《GIS软件进行风暴潮沿海洪水建模》 &#xff0c;于是简单尝试了一下&#xff…

【python的输入】sys.stdin与sys.argv

在老师的课堂里碰到了sys.stdin与sys.argv&#xff0c;虽然是很简单的东西&#xff0c;还是花了大半天的时间才勉强理解。在这里记录一下学习过程&#xff0c;方便以后用到复习。 一、sys.stdin 根据python3 library里的解释&#xff0c; sys.stdin可用于所有交互式的输入。 …

Axios post请求出现500错误

笔者在编写前端form表单传后端数据的时候&#xff0c;出现了以下问题 一、问题场景 当我用axios发送post请求的时候&#xff0c;出现了500错误 笔者找了很长时间错误&#xff0c;代码没问题&#xff0c;后端接口也没问题&#xff0c;后来发现问题出在实体类上了 当前端post请…

kr 第三阶段(三)调试器

调试框架 特点&#xff1a;事件驱动&#xff0c;事件响应。 Win32 程序是消息驱动响应的基址&#xff0c;而在调试器则是事件驱动响应&#xff0c;有事件则处理&#xff0c;无事件则去做别的事。 事件&#xff1a;整个调试框架是建立在异常的基础之上的基本单位。响应&#xf…

SpringBoot中使用拦截器

拦截器属于MVC中的内容 SpringBoot项目,引入web依赖即可 需要访问的控制器 拦截器第一步实现HandlerInterceptor接口 第二步实现WebMvcConfigurer接口,并重写addInterCeptors()方法,将自定义的拦截器注册 也就是说这里add进去拦截的请求,才会进入到prehandle方法,这里放行的请…

调用gethostbyname实现域名解析(附源码)

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…

一文拿捏分布式协调Redis客服端-Redisson

Redisson 1.介绍 Redisson - 是一个高级的分布式协调Redis客服端 , 专注于分布式系统开发&#xff0c;让用户可以在分布式系统中很方便的去使用Redis。 2.相关使用 1.加锁 //底层是lua脚本保证了加锁的原子性 // 一直等待获取锁&#xff0c;直到获取到锁为止! 默认锁的存活…

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识&#xff0c;起步是晚了一点&#xff0c;但好歹是开了个头。下面就借助TransFusion论文…

一键智能视频语音转文本——基于PaddlePaddle语音识别与Python轻松提取视频语音并生成文案

前言 如今进行入自媒体行业的人越来越多&#xff0c;短视频也逐渐成为了主流&#xff0c;但好多时候是想如何把视频里面的语音转成文字&#xff0c;比如&#xff0c;录制会议视频后&#xff0c;做会议纪要&#xff1b;比如&#xff0c;网课教程视频&#xff0c;想要做笔记&…