NO.57十六届蓝桥杯备战|基础算法-高精度|加减乘除|模拟竖式计算(C++)

当数据的值特别⼤,各种类型都存不下的时候,此时就要⽤⾼精度算法来计算加减乘除:

  • 先⽤字符串读⼊这个数,然后⽤数组逆序存储该数的每⼀位;
  • 利⽤数组,模拟加减乘除运算的过程。
    ⾼精度算法本质上还是模拟算法,⽤代码模拟⼩学列竖式计算加减乘除的过程
P1601 A+B Problem(高精) - 洛谷

模拟⼩学「列竖式」计算「两数相加」的过程
![[Pasted image 20250325135304.png]]

  1. ⽤字符串读⼊数据;
  2. 将字符串的每⼀位拆分,逆序放在数组中;
  3. 模拟列竖式计算的过程:
    a. 对应位累加;
    b. 处理进位;
    c. 处理余数。
  4. 处理结果的位数。
#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;
int a[N], b[N], c[N];
int la, lb, lc;void add(int c[], int a[], int b[])
{for (int i = 0; i < lc; i++){c[i] += a[i] + b[i];c[i + 1] += c[i] / 10;c[i] %= 10;}if (c[lc]) lc++;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);string x, y; cin >> x >> y;//拆分每一位逆序放在数组中la = x.size(); lb = y.size(); lc = max(la, lb);for (int i = 0; i < la; i++) a[la - 1 - i] = x[i] - '0';for (int i = 0; i < lb; i++) b[lb - 1 - i] = y[i] - '0';//模拟加法add(c, a, b);//输出结果for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
P2142 高精度减法 - 洛谷
  1. ⽤字符串读⼊数据;
  2. 判断两个数的⼤⼩,让较⼤的数在前。注意字典序vs数的⼤⼩:
    a. 位数相等:按字典序⽐较;
    b. 位数不等:按照字符串的⻓度⽐较。
  3. 将字符串的每⼀位拆分,逆序放在数组中;
  4. 模拟列竖式计算的过程:
    a. 对应位求差;
    b. 处理借位;
  5. 处理前导零。
#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;
int a[N], b[N], c[N];
int la, lb, lc;bool cmp(string& x, string& y)
{if (x.size() != y.size()) return x.size() < y.size();return x < y;
}void sub(int c[], int a[], int b[])
{for (int i = 0; i < lc; i++){c[i] += a[i] - b[i]; //对应位相减处理借位if (c[i] < 0){c[i + 1] -= 1;c[i] += 10;}}//处理前导0while (lc > 1 && c[lc - 1] == 0) lc--;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);string x, y; cin >> x >> y;//比大小if(cmp(x, y)){swap(x, y);cout << "-";}//拆分,逆序la = x.size(); lb = y.size(); lc = max(la, lb);for (int i = 0; i < la; i++) a[la - i - 1] = x[i] - '0';for (int i = 0; i < lb; i++) b[lb - i - 1] = y[i] - '0';//模拟减法sub(c, a, b);//输出for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
P1303 A*B Problem - 洛谷

⽆进位相乘再相加:

  • 还是「列竖式」,但是每⼀位相乘的时候不考虑进位,直接把乘的结果放在对应位上;
  • 等到所有对应位置「乘完」并且「累加完」之后,「统⼀处理进位」
  1. ⽤字符串读⼊数据;
  2. 将字符串的每⼀位拆分,逆序放在数组中;
  3. 模拟⽆进位相乘再相加的过程:
    a. 对应位求乘积;
    b. 乘完之后处理进位;
    c. 处理余数;
  4. 处理前导零
#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;
int a[N], b[N], c[N];
int la, lb, lc;void mul(int c[], int a[], int b[])
{//无进位相乘,相加for (int i = 0; i < la; i++){for (int j = 0; j < lb; j++){c[i + j] += a[i] * b[j];        }}//处理进位for (int i = 0; i < lc; i++){c[i + 1] += c[i] / 10;c[i] %= 10;}//处理前导0while (lc > 1 && c[lc - 1] == 0) lc--;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);string x, y; cin >> x >> y;//拆分,逆序la = x.size(); lb = y.size(); lc = la + lb;for (int i = 0; i < la; i++) a[la - 1 - i] = x[i] - '0';for (int i = 0; i < lb; i++) b[lb - 1 - i] = y[i] - '0';//模拟乘法mul(c, a, b);//输出for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
P1480 A/B Problem - 洛谷

![[Pasted image 20250325161925.png]]

定义⼀个指针i 从「⾼位」遍历被除数,⼀个变量t 标记当前「被除的数」,记除数是b ;

  • 更新⼀个当前被除的数t = t × 10 + a[i];
  • t/b 表⽰这⼀位的商,t%b 表⽰这⼀位的余数;
  • ⽤t 记录这⼀次的余数,遍历到下⼀位的时候重复上⾯的过程
    被除数遍历完毕之后,t ⾥⾯存的就是余数,但是商可能存在前导0 ,注意清空
#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;
typedef long long LL;
int a[N], b, c[N];
int la, lc;void sub(int c[], int a[], int b)
{LL t = 0; //标记余数for (int i = la - 1; i >= 0; i--){//计算被除数t = t * 10 + a[i];c[i] = t / b;t %= b;}//处理前导0while (lc > 1 && c[lc - 1] == 0) lc--;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);string x; cin >> x >> b;la = x.size();for (int i = 0; i < la; i++) a[la - 1 - i] = x[i] - '0';//模拟除法lc = la;sub(c, a, b);//输出for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}

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

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

相关文章

最新DeepSeek-V3-0324:AI模型性能提升与新特性解析

文章目录 性能提升概览新特性解析1. 推理任务表现提高2. 前端开发能力增强3. 中文写作与搜索能力优化4. 模型开源 总结与展望 随着人工智能技术的快速发展&#xff0c;模型的迭代更新成为推动技术进步的重要力量。最近&#xff0c;DeepSeek团队发布了其V3模型的最新小版本更新—…

linux常用指令(7)

今天还是继续学习linux相关的指令,基础越牢固,就越有利于我们后面的学习,那么话不多说,来看. 1.head指令 功能描述&#xff1a;用于显示文件的开头部分内容,默认情况下head显示文件的前10行内容. 基本语法&#xff1a;head 文件 选项&#xff1a;-n nums 显示前nums行内容 …

数仓架构告别「补丁」时代!全新批流一体 Domino 架构终结“批流缝合”

在数字化转型的浪潮中&#xff0c;企业对数据处理的需求日益复杂多变&#xff0c;传统的批处理和流处理架构已难以满足日益增长的性能和时效性要求。在此背景下&#xff0c;YMatrix CEO 姚延栋发布了深度文章《数仓架构告别「补丁」时代&#xff01;全新批流一体 Domino 架构终…

HTB 笔记 | SQL 注入基础 + 实操小练习 P2

1. 数据库类型 数据库分为两类&#xff1a; 关系型数据库&#xff08;Relational Databases&#xff09; 使用表格存储数据&#xff08;行和列&#xff09;。数据通过“键”连接&#xff0c;形成逻辑关系。示例&#xff1a;MySQL、PostgreSQL、SQL Server。特点&#xff1a;结…

MySQL 入门大全:数据类型

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

解决 Not allowed to load local resource 问题

记录一下遇到的问题&#xff1a;html跳转本地资源&#xff0c;用相对路径 这样是不对的&#xff0c;要用 <script src"/jquery.min.js"></script> 网络路径也行&#xff0c;慢了一点 记得一定要关闭浏览器的广告屏蔽器 绝对路径也行&#xff0c;不过要…

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…

[深度学习]图像分类项目-食物分类

图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…

C++初阶入门基础二——类和对象(中)

1类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前4个&#xff0c;最后两个取地址重载不重…

基于SSM框架的线上甜品销售系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此网上销售信息的…

3.25学习总结java 接口+内部类

JDK8以后新增的方法 可以将接口中静态方法和抽象方法中重复的部分抽离出来&#xff0c;作为私有方法&#xff0c;用去private修饰&#xff0c;此方法只为接口提供服务&#xff0c;不需要外界访问。 接口的应用 接口代表规则&#xff0c;是行为的抽象&#xff0c;想让哪个类拥有…

Linux--环境变量

ok&#xff0c;今天我们来学习Linux中的环境变量、地址空间、虚拟内存 环境变量 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我…

Java 集合 List、Set、Map 区别与应用

一、核心特性对比 二、底层实现与典型差异 ‌List‌ ‌ArrayList‌&#xff1a;动态数组结构&#xff0c;随机访问快&#xff08;O(1)&#xff09;&#xff0c;中间插入/删除效率低&#xff08;O(n)&#xff09;‌‌LinkedList‌&#xff1a;双向链表结构&#xff0c;头尾操作…

基于 arco 的 React 和 Vue 设计系统

arco 是字节跳动出品的企业级设计系统&#xff0c;支持React 和 Vue。 安装模板工具 npm i -g arco-cli创建项目目录 cd someDir arco init hello-arco-pro? 请选择你希望使用的技术栈React❯ Vue? 请选择一个分类业务组件组件库Lerna Menorepo 项目❯ Arco Pro 项目看到以…

JVM-GC(G1)实践—GC异常定位、参数调整、GC更换

前言 如SpringBoot官方介绍所说的那样&#xff0c;从SpringBoot3.x开始支持的最低JDK版本为&#xff1a;JDK17&#xff08;官方推荐使用BellSoft Liberica JDK&#xff09;&#xff0c;其对应的GC为G1。 本文笔者从应用实践的角度出发&#xff0c;记录一些关于GC的一些实践总…

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中&#xff0c;文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式&#xff0c;还是硬盘中混乱的音频、视频、文档等资源&#xff0c;都急需一种高效的整理方法。文件分类助手应运而生&#xff0c;它是一款文件管理工具&#xff0c;能够快速、智…

修改Flutter工程中Android项目minSdkVersion配置

Flutter项目开发过程中&#xff0c;根据模板自动生成.android项目&#xff0c;其中app>build.gradle中minSdkVersion的值是19&#xff0c;但是依赖了一个三方库&#xff0c;它的Android sdk 最小版本只支持到21&#xff0c;运行报错如下&#xff1a; 我们可以手动修改.andro…

如何设计一个订单号生成服务?应该考虑那些问题?

如何设计一个订单号生成服务&#xff1f;应该考虑那些问题&#xff1f; description: 在高并发的电商系统中&#xff0c;生成全局唯一的订单编号是关键。本文探讨了几种常见的订单编号生成方法&#xff0c;包括UUID、数据库自增、雪花算法和基于Redis的分布式组件&#xff0c;并…

Java学习总结-Stream流

啥是Stream流&#xff1f; 用于操作集合或数组的数据。他就像把数据化为成一条河流&#xff0c;我们可以对这条流操作&#xff0c;例如过滤。 获取Stream流 Stream流的常用方法&#xff1a; Stream流的终结方法&#xff1a; 收集Stream流

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…