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

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

高精度乘法
#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;
}
相关文章:
高精度算法(加、减、乘、除、阶乘和)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 唯有主动付出,才有丰富的果…...
实战设计模式之备忘录模式
概述 与解释器模式、迭代器模式一样,备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态,并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式,开发者可以轻松添加诸…...
keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?
在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...
吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察
德州齐河,2025年4月15日电 时中美贸易突变之际,乘国家一带一路之风。 展中国新能源之宏图,塑国贸体系之新方向。 今日上午,吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南,开启对德瑞新能源科技有限公司&…...
无人机在农业中的应用与挑战!
一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如,湖北秭归县使用大疆T100无人机吊运脐橙,单次85公斤的运输任务仅需2分钟,而人工需1小时,综合成本降低250元…...
放松大脑的方法
帮助一个人放松大脑,需要结合生理调节、心理技巧和环境优化。以下是一些科学有效的方法,涵盖即时缓解和长期习惯培养: 一、即时放松技巧(快速起效) 1. 深呼吸法(4-7-8呼吸) 方法:吸…...
QT网络拓扑图绘制实验
前言 在网络通讯中,我qt常用的是TCP或者UDP协议,就比方说TCP吧,一台服务器有时可能会和多台客户端相连接,我之前都是处理单链接情况,最近研究图结构的时候,突然就想到了这个问题。那么如何解决这个问题呢&…...
英语四级翻译题练习文章示例
大学正慢慢成为过去吗?Are universiities slowly becoming a thing of the past? 1.1900年前后,法国艺术家让-马克科泰接受委托绘制一组图画,描绘他认为的2000年人们可能过上的生活。Around 1900, the French artist Jean-Marc Cote was commissioned …...
支持中文对齐的命令行表格打印python库——tableprint
文章目录 快速入门 还在为表格中含有中文,命令行打印无法对齐而苦恼吗? 还在为冗长的数据添加代码而抓狂吗? tableprint来了!!!,它完美的解决了上述两个问题,快来试试吧!…...
从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相
今天(4月19日)22:00,由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中,“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷,将继续意大利之旅,从那不勒斯的百年老店到…...
生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)
免疫检查点分子与肿瘤免疫治疗 免疫检查点分子与肿瘤免疫治疗-2...
CasualLanguage Model和Seq2Seq模型的区别
**问题1:**Causal Language Modeling 和 Conditional Generation 、Sequence Classification 的区别是什么? 因果语言模型(Causal Language Model): 预测给定文本序列中的下一个字符,一般用于文本生成、补全句子等,模型…...
verilog float mult
module pipe_float_mul(input wire clk ,// 时钟信号input wire en ,// 使能信号input wire rst_n ,// 复位信号input wire round_cfg ,// 决…...
微信小程序调用yolo目标检测模型
目录 后端 前端微信小程序 完整代码 后端 利用Flask,调用目标检测模型,后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…...
Flink框架十大应用场景
Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…...
Crawl4AI:重塑大语言模型数据供给的开源革命者
在AI技术飞速迭代的今天,大型语言模型(LLMs)的进化已从单纯参数竞赛转向数据质量与实时性的深度博弈。传统API接口的僵化、静态数据库的滞后性,正在成为制约AI系统实用价值的桎梏。而Crawl4AI的出现,以开源之力重构了数…...
Android 应用wifi direct连接通信实现
一. 打开Wi-Fi direct 1.必须启用Wi-Fi功能:在设备设置中开启Wi-Fi主开关(即使未连接路由器) 关闭冲突功能:若已开启「热点共享」或连接到其他Wi-Fi网络,需先关闭相关功能以避免硬件占. <!-- Wi-Fi Direct 核心权限…...
Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)
1. 什么是动态代理 在运行时为指定的接口自动生成代理对象,并通过 invoke 方法增强了这些对象的功能 2. 两个核心组件 java.lang.reflect.Proxy类 这个类提供了方法:newProxyInstance()用来创建一个代理对象 public static Object newProxyInstance(…...
【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】
1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类,但是我们在实际 aosp 中确找不到具体的实现, 这是为何? 这是一个很好的问题!虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念,但…...
【mongodb】数据库操作
目录 1. 查看所有数据库2. 切换到指定数据库(若数据库不存在,则创建)3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库(若数据库不存在,则…...
【Harmony】文本公共接口EditMenuOptions的使用
文章目录 一、EditMenuOptions介绍二、相关接口介绍2.1、editMenuOptions2.2、EditMenuOptionsonCreateMenu函数说明onMenuItemClick函数说明 2.3、TextRange对象说明2.4、TextMenuItem对象说明2.5、TextMenuItemId属性ofequals 三、简单案例 一、EditMenuOptions介绍 EditMen…...
《软件设计师》复习笔记(14.1)——面向对象基本概念、分析设计测试
目录 一、面向对象基本概念 对象(Object) 类(Class) 抽象(Abstraction) 封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism&#…...
C++ 基于多设计模式下的同步异步⽇志系统-1准备工作
一.项目介绍 项⽬介绍 本项⽬主要实现⼀个⽇志系统, 其主要⽀持以下功能: • ⽀持多级别⽇志消息 • ⽀持同步⽇志和异步⽇志 • ⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中 • ⽀持多线程程序并发写⽇志 • ⽀持扩展不同的⽇志落地⽬标地 二.日志系统的三种实现…...
JS中实现类似sleep、wait、delay的延时功能
前言 编写代码时很多时候需要进行流程化的操作,各个流程间通常需要等待一定时间,这在很多语言中通常可以使用 sleep 、 wait 、 delay 等函数来实现。JavaScript原生并没有类似的功能,想要延时通常就是使用 setTimeout(functionRef, delay) …...
Banana Pi BPI-RV2 RISC-V 路由器开发板发售, 全球首款RISC-V路由器
Banana Pi BPI-RV2 开源路由器是矽昌通信和⾹蕉派开源社区(Banana Pi )合作设计, 联合打造全球首款RISC-V架构路由器开发板。 这是香蕉派开源社区与矽昌通信继BPI-Wifi5 低成本Wifi5 路由器合作之后的又一力作,为全球开发者与商业客户提供基于…...
M|触碰你
rating: 7 M|触碰你 碰碰的设定本身还可以,但是结局有点怪。 中期剧情发展不错,三个男人和两个女人的故事。友情线笔墨多但很常规,感情线有点意思。对人际关系、沟通等的主题的探索蛮好。 总之,虽然宣传是《未闻花…...
MAUI项目iOS应用以进 App Store 分发
目录 一.通过Visual Studio分发应用1. 登录Apple 开发者帐户到 Visual Studio2.创建分发证书和配置文件3. 分发应用4. 在App Store Connect 中创建应用程序记录5. 如果你想使用mac发布应用 一.通过Visual Studio分发应用 1. 登录Apple 开发者帐户到 Visual Studio 首先我们要…...
CentOS 7系统yum报错解决方案(CentOS 7官方EOL问题修复)
摘要 解决CentOS 7因EOL导致的yum update报错问题,通过替换阿里云镜像源恢复软件安装功能,包含详细操作步骤、操作截图、验证方法与备选镜像源,附有安全风险提示。 一、故障现象与原因分析 1.1 典型报错信息 # 执行yum命令时出现ÿ…...
解决Windows update服务启动拒绝访问的问题 | wuauserv 注册表拒绝访问的方法
在某些情况下,为了配置系统更新相关服务(例如禁用 Windows 自动更新),我们需要更改注册表中 wuauserv 项的权限。本教程将带你一步步操作,成功获取并修改权限。 修改注册表路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv 步骤一:打开注册表编辑…...
深入解析 JDK jstack 命令:线程分析的利器
你点赞了吗?你关注了吗?每天分享干货好文。 高并发解决方案与架构设计。 海量数据存储和性能优化。 通用框架/组件设计与封装。 如何设计合适的技术架构? 如何成功转型架构设计与技术管理? 在竞争激烈的大环境下,…...
