高精度算法笔记·····························

目录

加法

减法

乘法

除法


高精度加法的步骤:

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从高位到低位依次输出

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

vector<int> mul(vector<int> A, vector<int> B) {int la = A.size(), lb = B.size();vector<int> C(la + lb, 0);for (int i = 0; i < la; i++) {for (int j = 0; j < lb; j++) {C[i + j] += A[i] * B[j];//累加乘积C[i + j + 1] += C[i + j] / 10;//进位C[i + j] %= 10;//存余}}//去掉高位无意义的0while (C.size() > 1 && !C.back()) C.pop_back();return C;
}

4

vector<int> C(mul(A, B));
for (int i = C.size() - 1; ~i; i--) cout << C[i];

测试(因为这个数据可以用计算器算。。。)


高精度除法的步骤:

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

2.把字符串翻转存入整型数组A

3.从高位到低位,当前被除数,存商,求余数

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

1.2为准备,注意只存被除数A

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

3为除法实现

void div(vector<int> A, long long b, vector<int>& C) {int la = A.size();long long t = 0;for (int i = la - 1; ~i; i--) {t = t * 10 + A[i];//当前被除数C.push_back(t / b);//存商t %= b;//余数}//翻转C,使无意义的连续0在C尾reverse(C.begin(), C.end());while (C.size() > 1 && !C.back()) C.pop_back();
}

4

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

测试


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

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

相关文章

考研机试题收获——高精度进制转换

代码的第一遍真的很重要&#xff0c;在第一次打的时候尽量把问题思考全面&#xff0c;不要漏打少打&#xff0c;尽量不要留bug给之后de。 一、基础方面 一、处理输出的结束问题 scanf和cin默认都不会读取空格 ①scanf()&#xff1a;如果从文件中读取数据&#xff0c;当scanf()…

小红书达人投放策略分析,品牌方必看

小红书已经成为品牌营销的重要战场&#xff0c;达人投放作为小红书营销的核心环节&#xff0c;其策略的精准与否直接关系到营销效果的好坏。本文伯乐网络传媒将对小红书达人投放的重要性、投放策略以及监测与优化进行深入探讨&#xff0c;以期为品牌提供更具实操性的营销建议。…

Python(36):调试过程中遇到的问题记录

错误1&#xff1a;TypeError: object of type NoneType has no len() 原因&#xff1a;这个错误是因为我们试图迭代那个不可迭代的对象。 原来方法&#xff1a;for i in rlen(data_list) 解决办法&#xff1a; for i in range(len(data_list)): 在循环中使用 range() 函数解决了…

【pytorch】Pytorch 中的 grid 与 各种变换

Pytorch 中的 grid 与 各种变换 数学原理 **单应性&#xff08;Homography&#xff09; : 也就是透视变换。**单应性最初用来研究欧几里得几何中的透视和投影&#xff0c;而单应性一词&#xff0c;从词源学上来说&#xff0c;大致意思是“相似的绘图”。单应性的概念被引入来…

Vue入门六(前端路由的概念与原理|Vue-router简单使用|登录跳转案例|scoped样式|混入(mixin)|插件)

文章目录 前要&#xff1a;前端路由的概念与原理1&#xff09;什么是路由2&#xff09;SPA与前端路由3&#xff09;什么是前端路由4&#xff09;前端路由的工作方式 一、Vue-router简单使用1&#xff09;什么是vue-router2) vue-router 安装和配置的步骤① 安装 vue-router 包②…

Chrome 浏览器插件 cookies API 解析

Chrome.cookie 前端开发肯定少不了和 cookie 打交道&#xff0c;此文较详细的介绍下 chrome.cookie 的 API 以及在 popup、service worker、content 中如何获取的 一、权限&#xff08;Permissions&#xff09; 如果需使用 Cookie API&#xff0c;需要在 manifest.json 文件…

【排序算法】自顶向下的归并排序

归并&#xff1a;将两个有序的数组归并成一个更大的有序数组。 要将一个数组排序&#xff0c;可以先递归的将它分成两半分别排序&#xff0c;然后将结果归并起来&#xff0c;这就是归并排序。归并排序最吸引人的性质是它能够保证将任意长度为N的数组排序所需时间和NlogN成正比&…

信驰达科技参与《汽车玻璃集成UWB数字钥匙发展研究白皮书》编制工作

为进一步探索汽车数字钥匙技术路线及开发思路&#xff0c;中国智能网联汽车产业创新联盟&#xff08;CAICV&#xff09;、福耀玻璃工业集团股份有限公司联合发起了《汽车玻璃集成UWB数字钥匙发展研究白皮书》研究工作。 2023年12月20日&#xff0c;由中国智能网联汽车产业创新…

PLSQL 把多个字段转为json格式

PLSQL 把多个字段转为json格式 sql Select cc.bm, cc.xm, json_arrayagg(cc.hb) jgFrom (Select aa.bm, aa.xm, json_object(aa.ksbh, aa.wjmc) hbFrom (Select 001 bm, 老六 xm, 0001 ksbh, 文具盒 wjmcFrom dual tUnion AllSelect 001 bm, 老六 xm, 0002 ksbh, 毛笔 wjmcFr…

Linux内核--网络协议栈(二)UDP数据包发送

目录 一、引言 二、数据包发送 ------>2.1、数据发送流程 三、协议层注册 ------>3.1、socket系统调用 ------>3.2、socket创建 ------>3.3、协议族初始化 ------>3.4、对应协议的socket创建 ------------>3.4.1、sock ------>3.5、协议注册 四…

yolo训练voc数据集划分

1、划分数据集比例split_train_val.py import os import random import argparseparser argparse.ArgumentParser() #xml文件的地址或者label的地址&#xff0c;根据自己的数据进行修改 xml一般存放在Annotations下 主要是获取每个数据的地址名字 parser.add_argument(--xml_…

SCRUM产品负责人(CSPO)认证Scrum Product Owner

课程简介 Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。产品负责人是Scrum的三个角色之一&#xff0c;产品负责人在Scrum产品开发当中扮演舵手的角色&#xff0c;他决定产品的愿景、路线图以及投资回报&#xff0c;他需要回答…

【C语言】详解文件与文件操作

1.什么是文件 文件是记录在外存上的相关信息的命名组合&#xff0c;但是在程序设计中&#xff0c;我们⼀般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09;。 1.1程序文件 程序文件包括&#xff1a; 源程序文件 &#xff0…

AI嵌入式K210项目(9)-DMA

文章目录 前言一、DMA是什么&#xff1f;二、K210的DMA实验过程总结 前言 本章我们来介绍K210的DMA控制器&#xff0c;大家应该都知道在大数据量传输时&#xff0c;如果CPU全程参与&#xff0c;是非常浪费资源的&#xff0c;于是芯片内置了DMAC用做传输控制&#xff0c;CPU仅仅…

Vue面试之v-if与v-show的区别

Vue面试之v-if与v-show的区别 DOM渲染初始渲染性能切换开销标签配合源码实现 最近在整理一些前端面试中经常被问到的问题&#xff0c;分为vue相关、react相关、js相关、react相关等等专题&#xff0c;可持续关注后续内容&#xff0c;会不断进行整理~ 作为Vue中两种条件性渲染元…

使用C++读取SQL Server数据库中的数据并转换为UNICODE类型

要使用C读取SQL Server数据库中的数据并转换为UNICODE类型&#xff0c;可以使用ODBC库和UNICODE编码函数。 首先&#xff0c;确保已安装SQL Server的ODBC驱动程序&#xff0c;并在项目中包含ODBC头文件<sql.h>和<sqlext.h>。 接下来&#xff0c;可以按照以下步骤进…

C#,入门教程(17)——条件语句(if-else)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(16)——可变数据类型&#xff08;var&#xff09;的基础知识与使用禁忌https://blog.csdn.net/beijinghorn/article/details/124032216 程序的核心是逻辑。 逻辑的核心是布尔条件表达式。 逻辑的主要体现形式之一是 if-else 语句…

上位机编程:ASCII码精讲

一 ASCII码介绍&#xff1a; ASCII&#xff08;American Standard Code for Information Interchange&#xff09;码是一种使用数字来表示字符的编码标准。它是一种字符编码&#xff0c;将常见的字符映射到数字&#xff0c;以便计算机能够理解和处理文本数据。 ASCII码最初是为…

十大排序算法模板

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

通信行业无线基本概念

fast roaming&#xff08;快速漫游&#xff09;&#xff1a;使用户在不同的基站&#xff08;access point&#xff09;间可以平滑的切换&#xff0c;在802.11r协议标准中定义。band steering&#xff08;波段转向&#xff09;&#xff1a;在双频段&#xff08;2.4G和5G&#xf…