当前位置: 首页 > article >正文

C++高精度算法(加、减、乘)

首先声明,没有除法是因为我不会(手动狗头_doge)

简介

顾名思义,高精度算法是用来算一些超级大的数,比如长到 longlong 都存不下的那种,还有就是小数点后好多位,double都存不下的那种,今天我写的是第一种——大数。

注意!!!不要输入负数!!!

#include<bits/stdc++.h>
using namespace std;
string a;
string b;
string func(string,string);
int main()
{cin>>a>>b;cout<<func(a,b);return 0;
}
string func(string x,string y)
{int n[1000]={0};int m[1000]={0};int s[1000]={0};//1.把用户输入的数转进一个个int,每个数位占一个空间//由于数组特性,还要把整个数字反转过来,方便后续处理int la=x.size();int lb=y.size();for(int i=0;i<la;i++){n[la-1-i]=x[i]-48;}for(int i=0;i<lb;i++){m[lb-1-i]=y[i]-48;}//2.逐位相加,暂时不进位for(int i=0;i<max(la,lb);i++){s[i]=n[i]+m[i];}//3.进位for(int i=0;i<max(la,lb);i++){if(s[i]>=10){s[i+1]++;s[i]=s[i]-10;}}//4.在数组结尾处做标记,方便读取int p=-1;for(int i=max(la,lb)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.读取运算结果,转入stringstring ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}

(自动选取大数减去小数)

#include<bits/stdc++.h>
using namespace std;
string a;
string b;
string func(string,string);
int main()
{cin>>a>>b;cout<<func(a,b);return 0;
}
string func(string x,string y)
{//备注:f为true是m比n大,反之亦然//1.首先要反转数组,再比出两个数哪个大,因为负数不好处理//相等直接输出0if(x==y)return 0;int n[10010]={0};int m[10010]={0};int s[10010]={0};//最终答案所在数组int ln=x.size();int lm=y.size();bool f=true;for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//比大小if(ln>lm){f=false;}else if(ln==lm&&x>y){f=false;}//2.分情况进行计算if(f==true){for(int i=0;i<lm;i++){s[i]=m[i]-n[i];}}else{for(int i=0;i<ln;i++){s[i]=n[i]-m[i];}}//3.退位for(int i=0;i<max(ln,lm);i++){if(s[i]<0){s[i+1]--;s[i]+=10;}}//4.在数组结尾处做标记,方便读取int p=-1;for(int i=max(ln,lm)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.输出结果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}

#include<bits/stdc++.h>
using namespace std;
string a;
string b;
string func(string,string);
int main()
{cin>>a>>b;cout<<func(a,b);return 0;
}
string func(string x,string y)
{int n[10010]={0};int m[10010]={0};int s[20020]={0};int ln=x.size();int lm=y.size();//1.反转数字for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//2.逐位相乘,错位相加for(int i=0;i<lm;i++){for(int j=0;j<ln;j++){s[i+j]+=m[i]*n[j];}}//3.进位for(int i=0;i<ln+lm;i++){s[i+1]+=s[i]/10;s[i]=s[i]%10;}//4.在数组结尾处做标记,方便读取int p=-1;for(int i=ln+lm;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.输出结果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}if(p==-1){return "0";}return ss;
}

加减乘混合

(输入两个数以后再次输入一个数,1是加法,2是减法,3是乘法)

(别想了,输入123以外的数会有提示)

#include<bits/stdc++.h>
#include<string.h>
#include<string>
using namespace std;
string a;
string b;
string funcjia(string,string);
string funcjian(string,string);
string funccheng(string,string);
int main()
{cin>>a>>b;int t;cin>>t;if(t==1){cout<<funcjia(a,b);}else if(t==2){cout<<funcjian(a,b);}else if(t==3){cout<<funccheng(a,b);}else{cout<<"Sorry,I can't find it.";}return 0;
}
string funcjia(string x,string y)
{int n[1000]={0};int m[1000]={0};int s[1000]={0};//1.把用户输入的数转进一个个int,每个数位占一个空间//由于数组特性,还要把整个数字反转过来,方便后续处理int ln=x.size();int lm=y.size();for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//2.逐位相加,暂时不进位for(int i=0;i<max(ln,lm);i++){s[i]=n[i]+m[i];}//3.进位for(int i=0;i<max(ln,lm);i++){if(s[i]>=10){s[i+1]++;s[i]=s[i]-10;}}//4.在数组结尾处做标记,方便读取int p=-1;for(int i=max(ln,lm)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.读取运算结果,转入stringstring ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}
string funcjian(string x,string y)
{//备注:f为true是m比n大,反之亦然//1.首先要反转数组,再比出两个数哪个大,因为负数不好处理//相等直接输出0if(x==y)return 0;int n[10010]={0};int m[10010]={0};int s[10010]={0};//最终答案所在数组int ln=x.size();int lm=y.size();bool f=true;for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//比大小if(ln>lm){f=false;}else if(ln==lm&&x>y){f=false;}//2.分情况进行计算if(f==true){for(int i=0;i<lm;i++){s[i]=m[i]-n[i];}}else{for(int i=0;i<ln;i++){s[i]=n[i]-m[i];}}//3.退位for(int i=0;i<max(ln,lm);i++){if(s[i]<0){s[i+1]--;s[i]+=10;}}//4.在数组结尾处做标记,方便读取int p=-1;for(int i=max(ln,lm)+1;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.输出结果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}return ss;
}
string funccheng(string x,string y)
{int n[10010]={0};int m[10010]={0};int s[20020]={0};int ln=x.size();int lm=y.size();//1.反转数字for(int i=0;i<ln;i++){n[ln-1-i]=x[i]-48;}for(int i=0;i<lm;i++){m[lm-1-i]=y[i]-48;}//2.逐位相乘,错位相加for(int i=0;i<lm;i++){for(int j=0;j<ln;j++){s[i+j]+=m[i]*n[j];}}//3.进位for(int i=0;i<ln+lm;i++){s[i+1]+=s[i]/10;s[i]=s[i]%10;}//4.在数组结尾处做标记,方便读取int p=-1;for(int i=ln+lm;i>=0;i--){if(s[i]!=0){p=i;break;}}//5.输出结果string ss="";for(int i=0;i<=p;i++){ss=(char)(s[i]+48)+ss;}if(p==-1){return "0";}return ss;
}

相关文章:

C++高精度算法(加、减、乘)

首先声明&#xff0c;没有除法是因为我不会&#xff08;手动狗头_doge&#xff09; 简介 顾名思义&#xff0c;高精度算法是用来算一些超级大的数&#xff0c;比如长到 longlong 都存不下的那种&#xff0c;还有就是小数点后好多位&#xff0c;double都存不下的那种&#xff…...

【图片识别改名工具】如何识别图片中文字内容,并根据文字对图片批量重命名批量改名,基于WPF和腾讯OCR的完整实现

​​办公场景​​ ​​批量处理图片文件​​:用户有一批图片文件,图片中包含文字信息(如编号、日期、名称等),需要根据图片中的文字内容对图片进行重命名。​​自动化办公​​:在办公场景中,用户需要将图片文件按内容分类或归档,手动重命名效率低下,自动化工具可以大幅…...

Dify+DeepSeek能做出什么来?快速构建可扩展的 AI 应用

将 Dify&#xff08;开源 LLM 应用开发平台&#xff09;与 DeepSeek&#xff08;深度求索公司的高性能大模型&#xff0c;如 DeepSeek-R1 或 DeepSeek-Lite&#xff09;结合使用&#xff0c;可以充分发挥两者的优势&#xff0c;快速构建高效、灵活且可扩展的 AI 应用。以下是具…...

【深度学习】Ubuntu 服务器配置开源项目FIGRET(PyTorch、torch-scatter、torch-sparse、Gurobi 安装)

开源项目网址&#xff1a;https://github.com/FIGRET/figret 该项目在SIGCOMM2024发表&#xff0c;用深度学习方法处理流量工程中的突发问题 1. 创建新的 Conda 环境 使用国内镜像源创建环境​ conda create -n figret python3.8.0 --override-channels -c https://mirrors.…...

浅析Centos7安装Oracle12数据库

Linux下的Oracle数据库实在是太难安装了&#xff0c;事贼多&#xff0c;我都怀疑能安装成功是不是运气的成分更高一些。这里虚拟机是VMware Workstation 15.5&#xff0c;操作系统是Centos7&#xff0c;Oracle版本是Oracle Database 12c Enterprise Edition Release 12.1.0.2.0…...

代码随想录算法训练营Day27 | Leetcode 56. 合并区间、738.单调递增的数字、968.监控二叉树

代码随想录算法训练营Day27 | Leetcode 56.合并区间、738.单调递增的数字、968.监控二叉树 一、合并区间 相关题目&#xff1a;Leetcode56 文档讲解&#xff1a;Leetcode56 视频讲解&#xff1a;Leetcode56 1. Leetcode56. 合并区间 以数组 intervals 表示若干个区间的集合&am…...

三大开源大模型应用框架深度对比:AnythingLLM、Dify 与 Open-WebUI

三大开源大模型应用框架深度对比&#xff1a;AnythingLLM、Dify 与 Open-WebUI 本文将全面解析三大主流开源大模型应用框架与Ollama的集成方案&#xff0c;帮助开发者根据实际需求选择最适合的工具。 一、框架概览与定位差异 1. AnythingLLM&#xff1a;企业级知识管理专家 …...

freertos低功耗模式简要概述

简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式&#xff0c;用于最小化系统的时钟中断频率&#xff0c;以降低功耗。在 Tickless 模式下&#xff0c;系统只在有需要时才会启动时钟中断&#xff0c;而在无任务要运行时则完全进入休眠状态&#xff0c;从而降低功耗。在滴答…...

ESP32S3 链接到 WiFi

以下是关于如何让 ESP32S3 连接到 WiFi 的完整流程和代码示例&#xff1a; ESP32S3 链接到 WiFi 1. 设置工作模式 ESP32 可以工作在两种模式下&#xff1a; Station (STA) 模式&#xff1a;作为无线终端连接到无线接入点&#xff08;AP&#xff09;&#xff0c;类似于手机或…...

2024年博客之星的省域空间分布展示-以全网Top300为例

目录 前言 一、2024博客之星 1、所有排名数据 2、空间属性管理 二、数据抓取与处理 1、相关业务表的设计 2、数据抓取处理 3、空间查询分析实践 三、数据成果挖掘 1、省域分布解读 2、技术开发活跃 四、总结 前言 2024年博客之星的评选活动已经过去了一个月&#xf…...

vue项目引入tailwindcss

vue3项目引入tailwindcss vue3 vite tailwindcss3 版本 初始化项目 npm create vitelatest --template vue cd vue npm install npm run dev安装tailwindcss3 和 postcss 引入 npm install -D tailwindcss3 postcss autoprefixer // 初始化引用 npx tailwindcss init -p…...

蓝桥赛前复习2:一维差分二维差分

一维差分 问题描述 给定一个长度为 nn 的序列 aa。 再给定 mm 组操作&#xff0c;每次操作给定 33 个正整数 l,r,dl,r,d&#xff0c;表示对 al∼ral∼r​ 中的所有数增加 dd。 最终输出操作结束后的序列 aa。 Update&#xff1a;由于评测机过快&#xff0c;n,mn,m 于 2024…...

算法---子序列[动态规划解决](最长递增子序列)

最长递增子序列 子序列包含子数组&#xff01; 说白了&#xff0c;要用到双层循环&#xff01; 用双层循环中的dp[i]和dp[j]把所有子序列情况考虑到位 class Solution { public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums.size(),1);for(int i …...

100道C#高频经典面试题带解析答案——全面C#知识点总结

100道C#高频经典面试题带解析答案 以下是100道C#高频经典面试题及其详细解析&#xff0c;涵盖基础语法、面向对象编程、集合、异步编程、LINQ等多个方面&#xff0c;旨在帮助初学者和有经验的开发者全面准备C#相关面试。 &#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSD…...

jar包安全加密工具

目录 1. 代码混淆工具(Obfuscation) 推荐工具 (1) ProGuard (2) Allatori (3) DashO 2. JAR 加密工具(Class 文件加密) 推荐工具 (1) JxCore (2) ClassFinal (3) Zelix KlassMaster 3. 自定义类加载器加密 实现思路 4. 打包成 Native 可执行文件 推荐工具 (…...

MQTT的构成、使用场景、工作原理介绍

一、MQTT内容简介 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议【适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境】它在物联网应用中广受欢迎&#xff0c;能够实现传感器、执行器和其它设备之间的…...

RESTful API以及使用它构建 web 应用程序的方法

RESTful API是一种基于REST&#xff08;Representational State Transfer&#xff09;架构风格的应用程序接口&#xff0c;通过HTTP协议传输数据并使用标准的HTTP方法&#xff08;GET、POST、PUT、DELETE&#xff09;来对资源进行操作。 RESTful API 遵循一系列约定和规范&…...

Vanna + qwq32b 实现 text2SQL

Vanna 是一个开源的 Text-2-SQL 框架&#xff0c;主要用于通过自然语言生成 SQL 查询&#xff0c;它基于 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;技术。Vanna 的核心功能是通过训练一个模型&#xff08;基于数据库的元数据和用户提…...

电脑知识 | TCP通俗易懂详解 <一>

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f68d;什么是TCP/TCP协议 三、&#x1f9cd;‍♂为什么TCP可靠 1.&#x1f970;关于可靠 2.&#x1f920;哪里可靠 3.&#x1f393;️图片的三次握手&#xff0c;四次挥手 4.&#x1f4da;️知识点总结 四、&…...

精品推荐-最新大模型MCP核心架构及最佳实践资料合集(18份).zip

精品推荐-最新大模型MCP核心架构及最佳实践资料合集&#xff0c;共18份。 1、2025年程序员必学技能&#xff1a;大模型MCP核心技术.pdf 2、MCP 架构设计剖析&#xff1a;从 Service Mesh 演进到 Agentic Mesh.pdf 3、MCP 架构设计深度剖析&#xff1a;使用 Spring AI MCP 四步…...

Linux 线程:从零构建多线程应用:系统化解析线程API与底层设计逻辑

线程 线程的概述 在之前&#xff0c;我们常把进程定义为 程序执行的实例&#xff0c;实际不然&#xff0c;进程实际上只是维护应用程序的各种资源&#xff0c;并不执行什么。真正执行具体任务的是线程。 那为什么之前直接执行a.out的时候&#xff0c;没有这种感受呢&#xf…...

VMware虚拟机Ubuntu磁盘扩容

VMware中操作&#xff1a; 选择要扩容的虚拟机&#xff0c;点击编辑虚拟机设置 打开后点击磁盘——>点击扩展&#xff08;注意&#xff1a;如果想要扩容的话需要删除快照&#xff09; 调整到你想要的容量 点击上图的扩展——>确定 然后我们进到虚拟机里面 首先&#…...

游戏引擎学习第217天

运行游戏并在 FreeVariableGroup 中遇到我们的断言 其实在美国&#xff0c;某些特定的小糖果&#xff08;例如小糖蛋&#xff09;只在圣诞节和复活节期间出售&#xff0c;导致有些人像我一样在这段时间吃得过多&#xff0c;进而增加体重。虽然这种情况每年都会发生&#xff0c…...

Day 8 上篇:深入理解 Linux 驱动模型中的平台驱动与总线驱动

B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 总线驱动模型实战全解析 —— 以 PCA9450 PMIC 为例 敬请关注&#xff0c;记得标为原始粉丝。 在 Linux 内核驱动模型中&#xff0c;设备与驱动的组织方式不是随意堆砌&#xff0c;而是基于清晰的分类…...

freertos内存管理简要概述

概述 内存管理的重要性 在嵌入式系统中&#xff0c;内存资源通常是有限的。合理的内存管理可以确保系统高效、稳定地运行&#xff0c;避免因内存泄漏、碎片化等问题导致系统崩溃或性能下降。FreeRTOS 的内存管理机制有助于开发者灵活地分配和释放内存&#xff0c;提高内存利用…...

Dify问题记录 (一)

问题背景 Dify智能体将含有中文的JSON参数传递到Java后端时出现乱码。 解决办法 在HTTP节点前添加代码执行节点&#xff0c;将参数强制编码为UTF-8格式。在Java后端代码中进行解码操作&#xff0c;以确保参数的正确性。 代码如下: 代码执行节点中代码 function main({arg…...

全新突破 | 更全面 · 更安全 · 更灵活

xFile 高可用存储网关 2.0 重磅推出&#xff0c;新增多空间隔离功能从根源上防止数据冲突&#xff0c;保障各业务数据的安全性与独立性。同时支持 NFS、CIFS、FTP 等多种主流文件协议&#xff0c;无需繁琐的数据拷贝转换&#xff0c;即可与现有系统无缝对接&#xff0c;降低集成…...

使用Python建立双缝干涉模型

引言 双缝干涉实验是物理学中经典的实验之一,它展示了光的波动性以及量子力学的奇异性。实验结果表明,当光或粒子通过两条狭缝时,它们会产生干涉现象,形成明暗相间的条纹图案。这种现象不仅说明了光的波动性,还揭示了量子力学的核心思想——粒子具有波动性。今天,我们将…...

T-Box车载系统介绍及其应用

定义 T-Box汽车系统&#xff0c;全称为Telematics - BOX&#xff0c;也常简称为车载T - BOX&#xff0c;是汽车智能系统及车联网系统中的核心组成部分&#xff0c;是安装在车辆上的一种高科技远程信息处理器。 工作原理 T-Box的核心功能主要通过MPU和MCU实现。MPU负责应用程序功…...

SQLyog使用教程

准备工作 链接本地数据库 准备 1&#xff1a;安装mySQL数据库 2&#xff1a;安装SQLyong 连接本地数据库 打开SQLyong应用&#xff0c;将会出现下面的页面 点击新建&#xff0c;输入链接名 输入密码&#xff0c;点击 连接 按钮 如果出现连接错误&#xff0c;且错误号为2058…...