高精度模板

高精度模板

  • 1. 高精度加法
  • 2. 高精度减法
  • 3. 高精度乘法
  • 4. 高精度除法

1. 高精度加法

  1. 高精度加法其实就是一个模拟过程,模拟我们正常计算。
  2. 但是要注意的是,我们正常将两个数进行相加的时候说从右往左进行相加的,所以这里我们的字符串也是要从右往左进行相加的。将相加后的值的个位放到一个vector容器中,并用r记录进位。
  3. 就是最后我们的在vector的值是倒着存放的,所以要将其反转后才是正确值。
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>//高精度加法
int main()
{string a, b;cin >> a >> b;vector<int> ret;int i = a.size() - 1, j = b.size() - 1;int r = 0;while (i >= 0 || j >= 0 || r){int sum = 0;sum += r;if (i >= 0) sum += a[i--] - '0';if (j >= 0) sum += b[j--] - '0';ret.push_back(sum % 10);r = sum / 10;}reverse(ret.begin(), ret.end());for (auto x : ret)cout << x;return 0;
}

2. 高精度减法

  1. 这个其实和高精度加法很相似,就是多了多了一步判断正负数,以及去除前导0的操作
  2. 还有就是借位操作
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>//高精度减法
void sub(string& a, string& b, vector<int>& ret)
{int i = a.size() - 1, j = b.size() - 1;int r = 0;while (i >= 0){int sum = a[i--] - '0' + r;if (j >= 0)sum -= b[j--] - '0';ret.push_back((sum + 10) % 10);if (sum < 0) r = -1;else r = 0;}//去除前导0while (ret.size() > 1 && ret.back() == 0)ret.pop_back();
}
int main()
{string a, b;cin >> a >> b;vector<int> ret;if (a >= b){sub(a, b, ret);}else{cout << "-";sub(b, a, ret);}reverse(ret.begin(), ret.end());for (auto x : ret)cout << x;cout << endl;return 0;
}

3. 高精度乘法

  1. 这里我们采用无进位相乘,这样可以大大减少我们的代码量。
  2. 同样的要注意去前导零。

在这里插入图片描述

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>//高精度乘法
int main()
{string a, b;cin >> a >> b;int n = a.size(), m = b.size();vector<int> ret(n + m);//1.无进位相乘reverse(a.begin(), a.end());reverse(b.begin(), b.end());for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){ret[i + j] += (a[i] - '0') * (b[j] - '0');}}//2.处理进位int r = 0;string tmp;for (auto x : ret){r += x;tmp += r % 10 + '0';r /= 10;}//3. 去除前导零while (tmp.size() > 1 && tmp.back() == '0')tmp.pop_back();reverse(tmp.begin(), tmp.end());cout << tmp;	return 0;
}

4. 高精度除法

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>//高精度乘法
int main()
{string a;int b;cin >> a >> b;vector<int> ret;int num = 0;int i = 0;while (i < a.size()){num = num * 10 + a[i++] - '0';ret.push_back(num / b);num %= b;}reverse(ret.begin(), ret.end());while (ret.size() > 1 && ret.back() == 0)ret.pop_back();for (int i = ret.size() - 1; i >= 0; i--)cout << ret[i];cout << endl;cout << "余数:" << num;return 0;
}

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

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

相关文章

每日一题---反转链表

文章目录 前言1.题目2.代码思路3.参考代码 前言 Leetcode—反转链表 1.题目 2.代码思路 3.参考代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* reve…

【数据结构】单链表的逻辑结构和物理结构

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【Java--数据结构】“从扑克到程序:深入探讨洗牌算法的原理与魅力“

前言 以下是学习Java顺序表的一个实例应用———简单的洗牌算法。 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 定义每张扑克牌的属性 生成一副扑克牌&#xff08;不包含大小王&#xff09; 洗牌方法 发牌方…

开发区块链DApp应用,引领数字经济新潮流

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;正成为数字经济中的一股强劲力量。DApp以其去中心化、透明公正的特点&#xff0c;为用户带来了全新的数字体验&#xff0c;开创了数字经济的新潮流。作为一家专业的区块链DApp应用开发公司&#xf…

Linux内核之hook机制:call_void_hook用法实例(六十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

在线音乐播放网站项目测试(selenium+Junit5)

在做完在线音乐播放网站项目之后&#xff0c;需要对项目的功能、接口进行测试&#xff0c;利用测试的工具&#xff1a;selenium以及Java的单元测试工具Junit进行测试&#xff0c;下面式测试的思维导图&#xff0c;列出该项目需要测试的所有测试用例&#xff1a; 测试结果&#…

友盟+|如何通过阿里云 Flink+Paimon 实现流式湖仓落地方案

01 友盟介绍 友盟 以“数据智能&#xff0c;驱动业务增长”为使命&#xff0c;为移动应用开发者和企业提供包括统计分析、性能监测、消息推送、智能认证等一站式解决方案。截止 2023 年 6 月&#xff0c;已累计为 270 万移动应用和 980 万家网站&#xff0c;提供十余年的专业数…

Python自学之路--001:Python + PyCharm安装图文详解教程

目录 1、概述 2、Python解释器 2.1、下载 2.2、Python安装 2.3、Python环境变量配置&#xff0c;必选项 3、PyCharm安装 3.1、PyCharm下载 3.2、PyCharm安装 4、建一个Hello World 5、Phcarm设置 5.1、Phcarm汉化 5.2、Phcarm工具栏显示在顶部 5.3、Phcarm通过pip安…

【服务器部署篇】Linux下Ansible安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

用这个方法,让你轻松从零搭建产品知识库

在市场竞争日益激烈的今天&#xff0c;一个系统化的产品知识库对于企业的重要性不言而喻。它不仅可以帮助团队成员快速掌握产品信息&#xff0c;提升服务效率&#xff0c;还能为客户提供及时准确的产品支持。那么&#xff0c;怎样才能从零开始&#xff0c;轻松搭建起一个合适的…

WebServer项目介绍文章【四叶专属】

Linux项目实战C轻量级Web服务器源码分析TinyWebServer 书接上文&#xff0c;学习开源项目的笔记没想到居然有不少阅读量&#xff0c;后面结合另一个前端开源项目简单做了点修改&#xff0c;没想到居然有需要的同学&#xff0c;那么我就专门为四叶开一篇文章吧&#xff0c;【源码…

探索未来的区块链DApp应用,畅享数字世界的无限可能

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;正成为数字经济中的一股强劲力量。DApp以其去中心化、透明公正的特点&#xff0c;为用户带来了全新的数字体验&#xff0c;开创了数字经济的新潮流。作为一家专业的区块链DApp应用开发公司&#xf…