算法打卡 day4

4 . 高精度算法

性质:数组或者容器从低位往高位依次存储大整数,方便进位。

4.1 高精度加法

给定两个正整数(不含前导 0),计算它们的和。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的和。

数据范围

1≤整数长度≤100000

输入样例:

12

23

输出样例:

35

思路:

模拟人工加法。

//高精度 加法#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;vector<int> sum(vector<int> &A,vector<int> &B)
{vector<int> C;int k = 0;for(int i = 0;i < max(A.size(),B.size());i++){if(i<A.size()) k+=A[i];if(i<B.size()) k+=B[i]; C.push_back(k%10);k/=10;}if(k) C.push_back(1);return C;} int main(){string a,b;vector<int> A,B;cin>>a>>b;for(int i = a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i = b.size()-1;i>=0;i--) B.push_back(a[i]-'0');vector<int> C=sum(A,B);for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;}
4.2 高精度减法

给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤105

输入样例:

32

11

输出样例:

21

思路:

模拟人工减法。

#include <bits/stdc++.h>
using namespace std;vector<int> A,B;bool cmp(vector<int> &A,vector<int> &B){if(A.size()!=B.size()) return A.size()>B.size();else{for(int i=A.size()-1;i>=0;i--){if(A[i]!=B[i]) return A[i]>B[i];}}return 1;
}vector<int> sub(vector<int> &A,vector<int> &B){int k=0;//表示上一位在这一位借走的位数vector<int> C;for(int i=0;i<A.size();i++){int t=A[i]-k;if(i<B.size()) t-=B[i];if(t<0) t+=10,k=1;else k=0;C.push_back(t%10);}while(C.size()>1&&C.back()==0) C.pop_back();return C;
}int main(){string a,b;cin>>a>>b;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');vector<int> C;if(cmp(A,B)) C=sub(A,B);  //当A>=B时,答案为0或正值else C=sub(B,A),cout<<"-";  //当A<B时,答案为负值for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;
}
4.3 高精度乘法

给定两个非负整数(不含前导 0)A 和 B,请你计算 A×B 的值。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

共一行,包含 A×B 的值。

数据范围

1≤A的长度≤100000,

0≤B≤10000

输入样例:

2

3

输出样例:

6

高精度x低精度

高精度x高精度

//高精度x低精度
#include<bits/stdc++.h>
#include<vector>using namespace std;vector<int> mul(vector<int> &A,int b)
{vector<int> C;int t=0;for(int i=0;i<A.size();i++){t+=A[i]*b;C.push_back(t%10);t/=10;}while(t){C.push_back(t%10);t/=10;}while(C.size()>1&&C.back()==0) C.pop_back();return C;
}
int main()
{string a;int b;cin>>a>>b;vector<int> A;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');auto C=mul(A,b);for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;
}
//高精度 x 高精度
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1e5+10;int A[N],B[N],C[N];
int la,lb,lc;void mul(int A[],int B[],int C[])
{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;}while(lc&&C[lc]==0) lc--;
}int main()
{string a,b;cin>>a>>b;la=a.size();lb=b.size();lc=la+lb+10;for(int i=a.size()-1;i>=0;i--) A[la-i-1]=a[i]-'0';for(int i=b.size()-1;i>=0;i--) B[lb-i-1]=b[i]-'0';mul(A,B,C);for(int i=lc;i>=0;i--) cout<<C[i];return 0;
}
4.4 高精度除法

给定两个非负整数(不含前导 0)A,B,请你计算 A/B的商和余数。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

共两行,第一行输出所求的商,第二行输出所求余数。

数据范围

1≤A的长度≤100000,

1≤B≤10000,

B 一定不为 00

输入样例:

7

2

输出样例:

3

1


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> div(vector<int> &A,int B,int &r)
{vector<int> C;for(int i=0;i<A.size();i++){r=r*10+A[i];C.push_back(r/B);r%=B;}reverse(C.begin(),C.end());while(C.size()>1&&C.back()==0) C.pop_back();return C;
}
int main()
{string a;int B,r=0;cin>>a>>B;vector<int> A;for(int i=0;i<a.size();i++) A.push_back(a[i]-'0');auto C=div(A,B,r);for(int i=C.size()-1;i>=0;i--) cout<<C[i];cout<<endl<<r;// 输出余数return 0;
}
4.5 高精度阶乘

问题描述

  输入一个正整数n,输出n!的值。

  其中n!=1*2*3*…*n

算法描述

  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数aA[0]表示a的个位,A[1]表示a的十位,依次类推。

  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。

  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

输入格式

  输入包含一个正整数nn<=1000。

输出格式

  输出n!的准确值。

样例输入

10

样例输出

3628800

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int N=1e5+10;
int n;
int a[N];int main()
{scanf("%d",&n);a[1]=1;int t=0;for(int i=2;i<=n;i++){for(int j=1;j<=10000;j++){int p=a[j]*i+t;a[j]=p%10;t=p/10;}}n=10000;while(a[n]==0) n--;for(int i=n;i>=1;i--) cout<<a[i];return 0;
}

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

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

相关文章

【笔记】Docker 配置阿里云镜像加速(公共地址即开即用,无需手动创建实例)

2025年06月25日记 【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记&#xff08;附 异常处理&#xff09;-CSDN博客 【笔记】解决 WSL 迁移后 Docker 出现 “starting services: initializing Docker API Proxy: setting up docker ap” 问题…

day35-Django(1)

day35-Django 3.2 前言 之前我们介绍过web应用程序和http协议,简单了解过web开发的概念。Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息处理本次HTTP请求,即完成本次请求的业务逻辑处理构造并返回处理结果——HTTP响应import socketserver = socket.socket() …

PostgreSQL全栈部署指南:从零构建企业级高可用数据库集群

PostgreSQL全栈部署指南:从零构建企业级数据库集群 前言: 本文详解了**PostgreSQL**所有的部署方式,如 yum 安装、源码编译安装、RPM包手动安装,以及如何选择适合的安装方式。适合不同的场景应用。通过高可用部署详细了解安装思路及过程,包括内网环境下的配置、主节点的创…

MQTT 和 HTTP 有什么本质区别?

MQTT 和 HTTP 的本质区别在于它们设计的初衷和核心工作模式完全不同。它们是为解决不同问题而创造的两种工具。 简单来说&#xff1a; HTTP 就像是去图书馆问问题&#xff1a;你&#xff08;客户端&#xff09;主动去找图书管理员&#xff08;服务器&#xff09;&#xff0c;…

GtkSharp跨平台WinForm实现

文章目录 跨平台架构设计跨平台项目配置GtkSharp串口通讯实现跨平台部署配置Linux系统配置macOS系统配置 相关学习资源GTK#跨平台开发跨平台.NET开发Linux开发环境macOS开发环境跨平台UI框架对比容器化部署开源项目参考性能优化与调试 跨平台架构设计 基于GTKSystem.Windows.F…

【闲谈】对于c++未来的看法

对于C未来看法 C 作为一门诞生于上世纪的编程语言&#xff0c;在软件工业发展史上扮演了不可替代的角色。尽管近年来诸如 Rust、Go、Swift、Kotlin 等现代语言相继崛起&#xff0c;C 依然在系统软件、高性能服务、嵌入式等关键领域中发挥着主力作用。本文将从 C 的当前应用前景…

【论文】云原生事件驱动架构在智能风控系统中的实践与思考

摘要 2023年6月至2024年3月,我作为某头部证券公司新一代极速交易系统的首席架构师,主导设计并落地了基于云原生事件驱动架构的全新交易风控平台。该项目旨在攻克原有系统无法支撑峰值20万笔/秒交易量、风控延迟超过3秒以及行情剧烈波动时系统崩溃等核心痛点。通过构建以Kube…

opensbi从0到1入门学习

最近要在RV64的平台上把Linux给bringup起来&#xff0c;由于当下的工作主要集中在底层硬件接口驱动、CPU的操作及RTOS应用等&#xff0c;虽然之前搞过Arm Linux的开发工作&#xff0c;但是比较基础的玩的比较少&#xff0c;所以真正要搞把系统bringup起来&#xff0c;我之前的知…

Python打卡:Day36

复习日 浙大疏锦行

开发过程中的时空权衡:如何优雅地平衡时间与空间效率

文章目录 恒的开发者困境一、理解时间与空间的基本概念1. 时间复杂度2. 空间复杂度 二、时空权衡的基本原则1. 硬件环境决定优先级2. 应用场景决定策略3. 数据规模的影响 三、实际开发中的权衡策略1. 缓存为王&#xff1a;用空间换时间2. 压缩数据&#xff1a;用时间换空间3. 预…

RAG 应用实战指南:从商业目标到系统落地与运营 E2E 实践

专栏入口 前言 在当今信息爆炸的时代&#xff0c;如何高效地从海量数据中提取有用信息并提供智能问答服务&#xff0c;成为众多企业关注的焦点。检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术以其结合了检索模型的精准性和生成模型的灵活性&a…

关于晨脉的概念解释

晨脉&#xff08;Resting Morning Pulse&#xff09;是指​​人体在清晨清醒后、未进行任何活动前​​&#xff0c;于卧床状态下测量的每分钟脉搏或心率次数。它反映了人体在无运动消耗、无神经干扰时的基础代谢状态&#xff0c;是评估心脏功能、身体恢复情况及运动适应性的重要…

自然语言处理入门

一、概念 自然语言处理&#xff08;Natural Language Processing, 简称NLP&#xff09;是计算机科学与语言中关注于计算机与人类语言间转换的领域。 二、发展史 2012年&#xff1a;深度学习的崛起 Word2Vec的提出&#xff08;Mikolov等&#xff0c;2013年正式发表&#xff0c…

【算法 day12】LeetCode 226.翻转二叉树 |101. 对称二叉树 |104.二叉树的最大深度|111.二叉树的最小深度

226.翻转二叉树 &#xff08;前序&#xff0c;后序&#xff09; 题目链接 | 文档讲解 |视频讲解 : 链接 1.思路&#xff1a; 翻转的是指针&#xff0c;不是数值 前序遍历和后序遍历都可以 中序不行&#xff0c;中序遍历的顺序是左中右,反转左指针后,到根节点&#xff0c;…

Spring Boot 整合 Swagger3 如何生成接口文档?

前后端分离的项目&#xff0c;接口文档的存在十分重要。与手动编写接口文档不同&#xff0c;swagger是一个自动生成接口文档的工具&#xff0c;在需求不断变更的环境下&#xff0c;手动编写文档的效率实在太低。与新版的swagger3相比swagger2配置更少&#xff0c;使用更加方便。…

Rust 的智能指针

在 Rust 中&#xff0c;智能指针是一种特殊的数据结构&#xff0c;它不仅存储数据的地址&#xff0c;还提供了额外的功能&#xff0c;如自动内存管理、引用计数等。智能指针在 Rust 中非常重要&#xff0c;因为它们帮助开发者管理内存&#xff0c;同时保持代码的安全性和效率。…

Redis RDB 持久化:原理、触发方式与优缺点全解析

引言 作为 Redis 最经典的持久化机制之一&#xff0c;RDB&#xff08;Redis DataBase&#xff09;凭借高效的快照生成能力和快速的恢复速度&#xff0c;一直是开发者的心头好。但很多人对它的底层原理、触发时机和适用场景仍存在疑惑。今天咱们就对RDB进行全解析&#xff0c;帮…

设计模式精讲 Day 12:代理模式(Proxy Pattern)

【设计模式精讲 Day 12】代理模式&#xff08;Proxy Pattern&#xff09; 文章内容 在软件开发中&#xff0c;代理模式是一种常见的结构型设计模式&#xff0c;它通过引入一个代理对象来控制对真实对象的访问。这种模式不仅能够增强系统的安全性、灵活性和可扩展性&#xff0c…

企业级知识库私有化部署:腾讯混元+云容器服务TKE实战

1. 背景需求分析 在金融、医疗等数据敏感行业&#xff0c;企业需要构建完全自主可控的知识库系统。本文以某证券机构智能投研系统为原型&#xff0c;演示如何基于腾讯混元大模型与TKE容器服务实现&#xff1a; 千亿级参数模型的私有化部署金融领域垂直场景微调高并发低延迟推…

Qt事件系统详解

一、Qt事件系统概述 Qt事件系统是Qt框架中处理用户输入、窗口交互、定时器、异步操作等机制的核心。所有事件均继承自QEvent类&#xff0c;并通过事件循环&#xff08;Event Loop&#xff09;分发到目标对象。 事件系统基本概念 事件(Event)&#xff1a;描述应用程序内部或外…