高精度算法笔记

目录

加法

减法

乘法

除法


高精度加法的步骤:

1.高精度数字利用字符串读入

2.把字符串翻转存入两个整型数组A、B

3.从低位到高位,逐位求和,进位,存余

4.把数组C从高位到低位依次输出

        1.2为准备

	vector<int> A, B, C;string st1,st2;cin >> st1 >> st2;int len1 = st1.size(), len2 = st2.size();for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

        3为加法具体实现(0按位取反为-1,即-1时结束等价于>=0)

void add(vector<int> A, vector<int> B, vector<int>& C) {int t = 0, la = A.size(), lb = B.size();for (int i = 0; i < la || i < lb; i++) {if (i < la) t += A[i];if (i < lb) t += B[i];C.push_back(t % 10); //存余t /= 10; //进位}if (t) C.push_back(t); //最高位
}

        4为结果输出,翻转输入所以一定也要翻转输出!!!

	for (int i = C.size() - 1; ~i; i--) cout << C[i];

测试


高精度减法的步骤:

1.高精度数字利用字符串读入

2.把字符串翻转存入两个整型数组A、B

3.若A<B,则交换A,B,输出负号

4.从低位到高位,逐位求差,借位,存差

5.把数组C从高位到低位依次输出

        1.2为准备(和加法同理)

	vector<int> A, B, C;string st1,st2;cin >> st1 >> st2;int len1 = st1.size(), len2 = st2.size();for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

        3        若A<B,则交换A,B,输出负号

	if (cmp(A, B)) swap(A, B), cout << '-';

若A<B返回true的比较函数cmp()

bool cmp(vector<int> A, vector<int> B) {if (A.size() != B.size())return A.size() < B.size();for (int i = A.size() - 1; ~i; i--)if (A[i] != B[i]) return A[i] < B[i];
//若A=B,返回false,避免给0加上负号return false;
}

        4为减法的具体实现

void sub(vector<int> A, vector<int> B, vector<int>& C) {int t, la = A.size(), lb = B.size();for (int i = 0; i < la; i++) {t = A[i];if (i < lb)t -= B[i];if (t < 0) A[i + 1]--, t += 10;//借位C.push_back(t);//存差}//C.back()返回最后一个元素,类似C[C.size()-1]while (C.size() > 1 && !C.back()) C.pop_back();
}//高位连续的0没有意义,需要去掉

        5为结果输出,翻转输入所以也一定要翻转输出!!!

	for (int i = C.size() - 1; ~i; i--) cout << C[i];

测试


高精度乘法步骤:

1.高精度数字利用字符串读入

2.把字符串翻转存入两个整型数组A、B

3.从低位到高位,累加成绩,进位,存余

4.把数组C从高位到低位依次输出

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

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

相关文章

5文件操作

包含头文件<fstream> 操作文件三大类&#xff1a; ofstream : 写文件ifstream &#xff1a;读文件fstream : 读写文件 5.1文本文件 -文件以ascii的形式存储在计算机中 5.1.1写文件 步骤&#xff1a; 包含头文件 #include "fstream"创建流对象 ofs…

SQL进阶3

二、多表连结 1、什么叫联结 下面&#xff0c;我们举个例子来说明&#xff1a; 学校的安排的课程信息&#xff0c;我们平时都会为主要人员负责的对应课程信息创建表格&#xff0c;让其更好地检索得到对应数据信息。学生可以查到自己本身的课程信息&#xff0c;而老师也可以查…

HTML--表单

睡不着就看书之------------------------ 表单 作用&#xff1a;嗯~~动态页面需要借助表单实现 表单标签&#xff1a; 主要分五种&#xff1a; form&#xff0c;input&#xff0c;textarea&#xff0c;select&#xff0c;option 从外观来看&#xff0c;表单就包含以下几种&…

设计Twitter时间线和搜索功能

设计Twitter时间线和搜索功能 设计 facebook feed 和 设计 facebook search是相同的问题 第一步&#xff1a;定义用例和约束 定义问题的需求和范围&#xff0c;询问问题去声明用例和约束&#xff0c;讨论假设 ps: 没有一个面试官会展示详细的问题&#xff0c;我们需要定义一些用…

服务器推送数据你还在用 WebSocket么?

当涉及到推送数据时,人们首先会想到 WebSocket。 的确,WebSocket 允许双向通信,可以自然地用于服务器到浏览器的消息推送。 然而,如果只需要单向的消息推送,HTTP 通过服务器发送的事件也有这种功能。 WebSocket 的通信过程如下: 首先,通过 HTTP 切换协议。服务器返回 101 状…

U-Boot学习(4):u-boot.lds链接脚本分析

在之前的文章中有介绍U-Boot的编译流程&#xff0c;但我们知道&#xff0c;不同的存储介质可能会接在不同的接口上&#xff0c;如NOR Flash、EMMC和SDRAM等内存的接口是不同的&#xff0c;而不同的接口对应CPU就会映射到不同的内存中。所以如果我们需要运行U-Boot的话&#xff…

介绍下Redis?Redis有哪些数据类型?

一、Redis介绍 Redis全称&#xff08;Remote Dictionary Server&#xff09;本质上是一个Key-Value类型的内存数据库&#xff0c;整个数据库统统加载在内存当中进行操作&#xff0c;定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作&#xff0c;Redis的性…

Matlab深度学习进行波形分割(二)

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

02.部署LVS-DR群集

技能展示&#xff1a; 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR&#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一种工作模式。 2.1.1&#xff0e;LVS-DR 工作原理 LVS-DR 模式&…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件&#xff0c;写入 module.exports {publicPath: ./, }

【SpringBoot框架篇】35.kafka环境搭建和收发消息

kafka环境搭建 kafka依赖java环境,如果没有则需要安装jdk yum install java-1.8.0-openjdk* -y1.下载安装kafka kafka3.0版本后默认自带了zookeeper&#xff0c;3.0之前的版本需要单独再安装zookeeper,我使用的最新的3.6.1版本。 cd /usr/local wget https://dlcdn.apache.…

C语言——编译和链接

&#xff08;图片由AI生成&#xff09; 0.前言 C语言是最受欢迎的编程语言之一&#xff0c;以其接近硬件的能力和高效性而闻名。理解C语言的编译和链接过程对于深入了解其运行原理至关重要。本文将详细介绍C语言的翻译环境和运行环境&#xff0c;重点关注编译和链接的各个阶段…

蓝桥杯AcWing学习笔记 8-2数论的学习(下)

蓝桥杯 我的AcWing 题目及图片来自蓝桥杯C AB组辅导课 数论&#xff08;下&#xff09; 蓝桥杯省赛中考的数论不是很多&#xff0c;这里讲几个蓝桥杯常考的知识点。 约数个数定理 我们如何去求一个数的约数个数呢&#xff1f; N N N分解质因数的结果&#xff1a; N P 1 α…

kubeSphere DevOps部署vue项目

devops部署vue项目 &#x1f314;环境说明&#x1f30f;创建DevOps工程&#x1f30f;填写流水线信息&#x1f30f;创建流水线 &#x1f314;部署应用所需脚本JenkinsfileDockerfile &#x1f314;脚本一些参数如何设置说明&#x1f30f;deploy.yaml中的:imagePullSecrets:name属…

部署 LVS-DR 群集

本章内容&#xff1a; -了解LVS-DR群集的工作原理 -会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR &#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一 种工作模式。 2.1.1 &#xff0e; LVS-DR 工作原理 …

JVM运行时数据区(下篇)

紧接上篇&#xff1a;JVM运行时数据区&#xff08;上篇&#xff09;-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中&#xff0c;可以存放堆上对象的引用。静态变量也可以存放堆对象的引用&#xff0c;通过静态…

记录Qt和opencv 新环境配置过程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Qt是什么&#xff1f;二、Qt的版本三、安装步骤1.下载Qt2.双击安装包.exe开始安装3. 需要登陆才能继续安装&#xff0c;没有的就用邮箱注册账号4.注意安装路…

linux创建文件

创建文件夹&#xff1a; mkdir folder_name其中&#xff0c;folder_name是想要创建的文件夹的名称。 例如&#xff0c;如果想在当前目录下创建一个名为 "my_folder" 的文件夹&#xff0c;可以运行以下命令&#xff1a; mkdir my_folder如果想在特定路径下创建文件…

element-ui el-table表格勾选框条件禁用,及全勾选按钮禁用, 记录

项目场景&#xff1a; 表格的部分内容是可以被勾选的&#xff0c;部分内容是不可以被勾选的 使用的是 “element-plus”: “^2.2.22”, 以上应该都是兼容的 问题描述 要求el-table表格中&#xff0c;部分内容不可以被勾选&#xff0c;全选框在没有可选内容时&#xff0c;是禁…

RK3566RK3568安卓11隐藏状态栏带接口

文章目录 前言一、创建全局变量二、设置应用添加隐藏导航栏按钮三、添加按钮功能四、动态隐藏还有显示功能五、创建系统导航栏广播接口总结 前言 关于Android系统的状态栏&#xff0c;不同的客户有不同的需求: 有些客户需要永久隐藏状态栏&#xff0c;有些客户需要在设置显示中…