高精度算法(加、减、乘、除、阶乘和)​

 归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
唯有主动付出,才有丰富的果实获得收获!

高精度乘法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+100; // 定义一个较大的数组大小,用于存储大整数string s1,s2; // 用于输入两个字符串形式的大整数
int a[N],b[N],c[N],ans,ma; // a 和 b 存储两个大整数的每一位数字,c 存储结果,ans 用于进位,ma 记录较大数的位数int main()
{cin>>s1>>s2; // 输入两个大整数(以字符串形式)int j=1,k=1;// 将字符串 s1 的每一位数字从低位到高位存入数组 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';// 将字符串 s2 的每一位数字从低位到高位存入数组 bfor(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';// 获取两个大整数的最大长度ma=max(s1.size(),s2.size());// 模拟竖式加法,逐位相加并处理进位for(int i=1;i<=ma;i++){ans+=a[i]+b[i]; // 当前位相加,并加上上一位的进位c[i]=ans%10; // 当前位的结果是相加后的个位数ans/=10; // 更新进位值}// 如果最高位仍有进位,则需要额外增加一位if(ans) c[++ma]=ans;// 从高位到低位输出结果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度减法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+100; // 定义一个较大的数组大小,用于存储大整数string s1,s2; // 用于输入两个字符串形式的大整数
int a[N],b[N],c[N],ma; // a 和 b 存储两个大整数的每一位数字,c 存储结果,ma 记录较大数的位数int main()
{cin>>s1>>s2; // 输入两个大整数(以字符串形式)// 如果 s1 小于 s2,则交换两者,并输出负号表示结果为负数if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2)){cout<<'-'; // 输出负号swap(s1,s2); // 交换 s1 和 s2 的值,确保 s1 始终是较大的数}int j=1,k=1;// 将字符串 s1 的每一位数字从低位到高位存入数组 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';// 将字符串 s2 的每一位数字从低位到高位存入数组 bfor(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';// 获取两个大整数的最大长度ma=max(s1.size(),s2.size());// 模拟竖式减法,逐位相减并处理借位for(int i=1;i<=ma;i++){if(a[i]-b[i]<0) // 如果当前位不够减{a[i]+=10; // 向高位借 10a[i+1]-=1; // 高位减 1}c[i]=a[i]-b[i]; // 当前位的结果是相减后的值}// 去掉结果中的前导零while(c[ma]==0&&ma>1) ma--;// 从高位到低位输出结果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度乘法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+100; // 定义一个较大的数组大小,用于存储大整数string s1,s2; // 用于输入两个字符串形式的大整数
int a[N],b[N],s[N],c[N],ans,ma; // a 和 b 存储两个大整数的每一位数字,s 存储中间结果,c 存储最终结果,ans 用于进位,ma 记录结果的最大可能位数int main()
{	cin>>s1>>s2; // 输入两个大整数(以字符串形式)int j=1,k=1;// 将字符串 s1 的每一位数字从低位到高位存入数组 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';// 将字符串 s2 的每一位数字从低位到高位存入数组 bfor(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';// 计算结果的最大可能位数ma=s1.size()+s2.size()-1; // 两个数相乘的结果最多有 s1.size() + s2.size() - 1 位// 模拟竖式乘法,逐位相乘并累加到中间结果数组 s 中for(int i=1;i<=s1.size();i++){for(int j=1;j<=s2.size();j++){s[i+j-1]+=a[i]*b[j]; // 将第 i 位和第 j 位相乘的结果累加到对应的位置}}// 处理进位,将中间结果数组 s 转换为最终结果数组 cfor(int i=1;i<=ma;i++){ans+=s[i]; // 累加当前位的值和之前的进位c[i]=ans%10; // 当前位的结果是累加值的个位数ans/=10; // 更新进位值}// 如果最高位仍有进位,则需要额外增加一位if(ans) c[++ma]=ans;// 去掉结果中的前导零while(c[ma]==0&&ma>1) ma--;// 从高位到低位输出结果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度除法

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+10; // 定义一个较大的数组大小,用于存储大整数string s1; // 用于输入字符串形式的大整数
int a[N],b,c[N],ans,ma; // a 存储大整数的每一位数字,b 是除数,c 存储结果,ans 用于存储当前余数,ma 记录大整数的位数int main()
{cin>>s1>>b; // 输入大整数(以字符串形式)和除数 bint j=1;// 将字符串 s1 的每一位数字从低位到高位存入数组 afor(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';ma=s1.size(); // 获取大整数的位数// 模拟竖式除法,逐位计算商和余数for(int i=ma;i>=1;i--){ans=ans*10+a[i]; // 当前余数乘以 10 加上当前位的数字c[i]=ans/b; // 当前位的商是当前余数除以除数 b 的结果ans%=b; // 更新余数为当前余数对除数 b 取模的结果}// 去掉结果中的前导零while(c[ma]==0&&ma>1) ma--;// 从高位到低位输出结果for(int i=ma;i>=1;i--)cout<<c[i];return 0;
}

高精度阶乘和

#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "const int N=1e5+10; // 定义一个较大的数组大小,用于存储大整数int n,a[N],b[N],ans,ma,mb; // a 存储当前阶乘的结果,b 存储前 n 个阶乘的和,ans 用于进位,ma 和 mb 分别记录当前阶乘和总和的最大位数int main()
{cin>>n; // 输入 n,表示求前 n 个阶乘的和for(int k=1;k<=n;k++) // 外层循环:求前 n 个阶乘的和{a[1]=1; ma=1; // 初始化当前阶乘为 1(即 1 的阶乘),并设置最大位数为 1for(int i=1;i<=k;i++) // 内层循环:计算 k 的阶乘{ans=0; // 初始化进位值为 0// 高精度乘法:将当前阶乘结果 a 乘以 ifor(int j=1;j<=ma;j++){ans+=a[j]*i; // 当前位乘以 i 并加上之前的进位a[j]=ans%10; // 当前位的结果是累加值的个位数ans/=10; // 更新进位值}// 如果最高位仍有进位,则需要扩展位数while(ans){a[++ma]=ans%10; // 将进位值添加到新的高位ans/=10; // 继续处理进位}}// 更新总和的最大位数mb=max(ma,mb); ans=0;// 高精度加法:将当前阶乘结果 a 加到总和 b 中for(int i=1;i<=mb;i++){ans+=a[i]+b[i]; // 累加当前位和之前的进位b[i]=ans%10; // 当前位的结果是累加值的个位数ans/=10; // 更新进位值}// 如果最高位仍有进位,则需要扩展位数if(ans) b[++mb]=ans;}	// 从高位到低位输出结果for(int i=mb;i>=1;i--)cout<<b[i];	return 0;
}

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

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

相关文章

探索大语言模型(LLM):马尔可夫链——从诗歌分析到人工智能的数学工具

提出背景与灵感起源 马尔可夫链由俄国数学家安德雷马尔可夫于1906年提出&#xff0c;最初是为了挑战当时概率论中“独立性假设”的局限性。他希望通过研究相依变量序列&#xff0c;证明即使随机变量之间存在依赖关系&#xff0c;大数定律和中心极限定理仍然成立。 灵感来源&am…

【web服务_负载均衡Nginx】三、Nginx 实践应用与高级配置技巧

一、Nginx 在 Web 服务器场景中的深度应用​ 1.1 静态网站部署与优化​ 在 CentOS 7 系统中&#xff0c;使用 Nginx 部署静态网站是最基础也最常见的应用场景。首先&#xff0c;准备网站文件&#xff0c;在/var/www/html目录下创建index.html文件&#xff1a; sudo mkdir -p…

C语言格式化输入输出总结 (printf和scanf)

一、printf格式化输出 1. 整数格式化 (%d, %i, %u, %o, %x) c复制代码 int num 42; // 以下为不同格式输出示例 printf("%d", num); // 42 (十进制) printf("%i", num); // 42 (同%d) printf("%u", num); // 42 (无符号十进制…

哈夫曼编码和哈夫曼树

哈夫曼编码&#xff08;Huffman Coding&#xff09; 是一种基于字符出现频率的无损数据压缩算法&#xff0c;通过构建哈夫曼树&#xff08;Huffman Tree&#xff09; 来生成最优前缀编码&#xff0c;使得高频字符用短编码&#xff0c;低频字符用长编码&#xff0c;从而实现高效…

Jetson Orin NX 部署YOLOv12笔记

步骤一.创建虚拟环境 conda create -n yolov12 python3.8.20 注意&#xff1a;YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 环境通用 步骤二.激活虚拟环境 conda activate yolov12 #激活环境 步骤三.查询Jetpack出厂版本 Jetson系列平台各型号支持的最高Jetp…

Linux指令篇 (2)

指令篇&#xff08;2&#xff09; Linux基本指令&#xff08;2&#xff09;(1) mkdir指令&#xff08;重要&#xff09;&#xff08;2&#xff09;rmdir指令&&rm指令(重要)&#xff08;3&#xff09;man指令(重要)&#xff08;4&#xff09;cp指令&#xff08;重要&…

致远OA——自定义开发rest接口

文章目录 :apple: 业务流程 &#x1f34e; 业务流程 代码案例&#xff1a; https://pan.quark.cn/s/57fa808c823f 官方文档&#xff1a; https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登录系统 —— 后台管理 —— 切换系…

区块链如何成为智能城市的底层引擎?从数据透明到自动化治理

区块链如何成为智能城市的底层引擎&#xff1f;从数据透明到自动化治理 引言&#xff1a;智能城市真的智能吗&#xff1f; 在数字化时代&#xff0c;智能城市&#xff08;Smart City&#xff09;逐步成为各国推动城市创新的重要方向。城市管理者希望借助物联网&#xff08;IoT…

洛谷P1177【模板】排序:十种排序算法全解(1)

扯谈 之前我已经把十大排序算法全讲了一遍&#xff08;具体详见专栏C排序算法&#xff09;,今天我们来用一道简单的题目总结实战一下。 算法实现 一、桶排序&#xff08;Bucket Sort&#xff09; ‌适用场景‌&#xff1a;数据范围已知且较小&#xff08;需根据测试数据调整…

SuperMap iClient3D for WebGL 如何加载WMTS服务

在 SuperMap iClient3D for WebGL 中加载WMTS服务时&#xff0c;参数配置很关键&#xff01;下面我们详细介绍如何正确填写参数&#xff0c;确保影像服务完美加载。 一、数据制作 对于上述视频中的地图制作&#xff0c;此处不做讲述&#xff0c;如有需要可访问&#xff1a;Onl…

再读bert(Bidirectional Encoder Representations from Transformers)

再读 BERT&#xff0c;仿佛在数字丛林中邂逅一位古老而智慧的先知。初次相见时&#xff0c;惊叹于它以 Transformer 架构为罗盘&#xff0c;在预训练与微调的星河中精准导航&#xff0c;打破 NLP 领域长久以来的迷雾。而如今&#xff0c;书页间跃动的不再仅是 Attention 机制精…

从零开始 保姆级教程 Ubuntu20.04系统安装MySQL8、服务器配置MySQL主从复制、本地navicat远程连接服务器数据库

从零开始&#xff1a;Ubuntu 20.04 系统安装 MySQL 8、服务器配置 MySQL 主从复制、本地 Navicat 远程连接服务器数据库 初始化服务器1. 更新本地软件包列表2. 安装 MySQL 服务器3. 查看 MySQL 安装版本4. 登录 MySQL 管理终端5. 设置 root 用户密码&#xff08;推荐使用 nativ…

java怎么完善注册,如果邮箱中途更换,能否判断

解析在下面 附赠代码 private static class CodeInfo {String code;long timestamp;CodeInfo(String code, long timestamp) {this.code code;this.timestamp timestamp;}}// 存储验证码&#xff08;邮箱 -> 验证码信息&#xff09;(保证线程安全) 以免中途更改邮箱pri…

n8n 中文系列教程_01. 简单易懂的现代AI魔法,n8n的快速了解与概念科普(文末有彩蛋)

1. 教程简介 欢迎来到“无代码工具探索”课程&#xff0c;这是专为非技术人员设计的指南&#xff08;当然&#xff0c;技术人员也可以从中受益&#xff09;。我们的目标是通过无代码工具来提升工作效率&#xff0c;尤其是利用像 n8n 这样的灵活数据库平台。这些工具被誉为“现…

解码 Web Service:从技术原理到应用场景的深度剖析

Web Service 是一种基于网络的、分布式的计算技术&#xff0c;它允许不同的应用程序之间通过网络进行通信和交互。以下是关于 Web Service 的详细介绍&#xff1a; 一、定义与概念 Web Service 是一种可以通过 Web 协议&#xff08;如 HTTP&#xff09;进行访问的软件组件&am…

Nacos启动报错

Nacos启动是在单机模式下&#xff0c;不是集群模式 点击startup.cmd启动会报错 打开bin目录 rem是注释的意思&#xff0c;在nacos1.3.2之后&#xff0c;nacos默认的都是集群模式&#xff0c;我们这里单机测试就是用单机模式。 也可以修改MODE&#xff0c;如果选择不修改&…

uniapp-商城-26-vuex 使用流程

为了能在所有的页面都实现状态管理&#xff0c;我们按照前面讲的页面进行状态获取&#xff0c;然后再进行页面设置和布局&#xff0c;那就是重复工作&#xff0c;vuex 就会解决这样的问题&#xff0c;如同类、高度提炼的接口来帮助我们实现这些重复工作的管理。避免一直在造一样…

Git 命令速查手册

听说用美图可以钓读者&#xff1f; 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…

信息量、香农熵、交叉熵、KL散度总结

信息量 对于一个事件而言&#xff0c;它一般具有三个特征&#xff1a; 小概率事件往往具有较大的信息量 大概率事件往往具有较小的信息量 独立事件的信息量相互可以相加 比如我们在买彩票这个事件中&#xff0c;彩票未中奖的概率往往很高&#xff0c;对我们而言一点也不稀…

使用C语言的cJSON中给JSON字符串添加转义

在 cJSON 库中&#xff0c;没有直接提供 一个函数来专门给 JSON 字符串添加转义&#xff08;如将 " 转义为 \"&#xff0c;\n 转义为 \\n 等&#xff09;。 但 cJSON 在 序列化&#xff08;cJSON_Print 或 cJSON_PrintUnformatted&#xff09; 时会自动处理转义字符…