蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度

目录

前言

1 题目描述

2 分析

2.1 关键代码

2.2 关键代码分析

3 代码


前言

详细的代码里面有自己的理解注释

1 题目描述

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

输入格式

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

输出格式

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

数据范围

1≤A的长度≤100000,
0≤B≤10000

输入样例:

123
12

输出样例:

1476

2 分析

这个题和前面对高精度-加-高精度和高精度-减-高精度的分析有细微差别,因为前面的加减法都是高精度和高精度的运算,这题是高精度和低精度的运算,所以只要对A用先采用string存储,然后换成int数字,并且按照数组下标的低位存储数值低位存储数值,B采用int存储,即可。

2.1 关键代码

//C = A * b
vint mult1(vint &A,int b) {vint C;int t = 0;for(int i = 0; i < A.size(); i ++) {//相当于//    1 2 3//  *   1 2//  = 36 * 10^0 + 24 * 10^1 + 12 * 10^2 = 1476//  进位初始 t0 = 0//  3 * 12 + t0 = 36 + 0 = 36 ,保留 6 ,进位 t1 = 3//  2 * 12 + t1 = 24 + 3 = 27 ,保留 7 ,进位 t2 = 2//  1 * 12 + t2 = 12 + 2 = 14,保留 4 ,进位 t3 = 1// = (36%10 + t0)*10^0 + (24%10 + t1)*10^1 + (12%10 + t2)*10^2 + t3*10^3// = (6 + 0 ) * 10^0   + (4 + 3) * 10^1    + (2 + 2) * 10^2    + 1 * 10^3 = 1476//最后有个进位//	6 * 10^0 + (4 + 3) * 10^1 + (2 + 2) * 10^2 + 1 * 10^3= 1476t = A[i] * b + t;C.push_back(t % 10);t  = t / 10;}
//	if(t){
//		C.push_back(t);
//	}
//不能用 if(t) ,必须使用 while(t) 因为最后可能 t 不止 1 位
//比如 99 * 99 = 9801 ,最后 t = 98 ,如果用 if(t) ,实际上 C = [98,0,1] ,而不是 [9,8,0,1]
//也可以不用下面的代码,在for循环里面改为 i < A.size() ||t,并且加上 if(i<A.size()) t = A[i]*b + twhile(t) {C.push_back(t%10);t = t / 10;}//记得去前导 0 while(C.size() > 1 && C.back() == 0) C.pop_back();return C;
}

2.2 关键代码分析

代码实现的乘法运算和平常我们做题的计算是不一样的,代码里面它是按照A的每位乘B存储的,这样其实也是对的,只是我们一般学的时候是两个数每位相乘再相加进位。当i<A.size()时,每位值结果为A[i]*B[i]%10,进位为A[i]*B[i]/10,其实理解起来比较简单,比如123*12,按平常我们的计算个位是3*2=6,十位由两个部分构成,1*3+2*2=7。而在代码里面我们直接用3*12=36,其中这个3*12的3先看作是个位,36的3就是1*3那部分,权重是10,6即是结果的个位;下一步2*12=24,其中这个2*12的2先看作是十位,24的2权重是100,4就是2*2那部分,也就是十位,所以十位就是3+3=7,百位的进位为2,其他的依次类推即可。详细的计算说明,在上面的关键代码里面有

3 代码

#include<iostream>
#include<vector>using namespace std;
typedef long long LL;
typedef vector<int> vint;const int N = 1e5 + 10;//C = A * b
vint mult1(vint &A,int b) {vint C;int t = 0;for(int i = 0; i < A.size(); i ++) {//相当于//    1 2 3//  *   1 2//  = 36 * 10^0 + 24 * 10^1 + 12 * 10^2 = 1476//  进位初始 t0 = 0//  3 * 12 + t0 = 36 + 0 = 36 ,保留 6 ,进位 t1 = 3//  2 * 12 + t1 = 24 + 3 = 27 ,保留 7 ,进位 t2 = 2//  1 * 12 + t2 = 12 + 2 = 14,保留 4 ,进位 t3 = 1// = (36%10 + t0)*10^0 + (24%10 + t1)*10^1 + (12%10 + t2)*10^2 + t3*10^3// = (6 + 0 ) * 10^0   + (4 + 3) * 10^1    + (2 + 2) * 10^2    + 1 * 10^3 = 1476//最后有个进位//	6 * 10^0 + (4 + 3) * 10^1 + (2 + 2) * 10^2 + 1 * 10^3= 1476t = A[i] * b + t;C.push_back(t % 10);t  = t / 10;}
//	if(t){
//		C.push_back(t);
//	}
//不能用 if(t) ,必须使用 while(t) 因为最后可能 t 不止 1 位
//比如 99 * 99 = 9801 ,最后 t = 98 ,如果用 if(t) ,实际上 C = [98,0,1] ,而不是 [9,8,0,1]
//也可以不用下面的代码,在for循环里面改为 i < A.size() ||t,并且加上 if(i<A.size()) t = A[i]*b + twhile(t) {C.push_back(t%10);t = t / 10;}//记得去前导 0 while(C.size() > 1 && C.back() == 0) C.pop_back();return C;
}int main() {string a;int b;cin>>a>>b;//a = "123",b = 12vint A;//A=[3 , 2 , 1],因为可能需要进位,个位放数组低位方便在数组高位加上进位for(int i = a.size() - 1 ; i >= 0 ; i --) {A.push_back(a[i] - '0');}if(b == 0) {cout<<0;} else {vint C = mult1(A,b);for(int i = C.size() - 1 ; i >= 0 ; i --) {cout<<C[i];}//cout<<C.size();}return 0;
}

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

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

相关文章

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象&#xff0c;该 Builder 类是独立于其他对象的 建造者模式属于创建型模式&#xff0c;它提供了一种创建对…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客&#xff0c;网上也有很多教程&#xff0c;很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

vcruntime140.dll最新的修复方法,一键修复vcruntime140.dll的手段

在这篇文章中&#xff0c;我们将深入探讨并详细介绍各种修复vcruntime140.dll文件缺失或损坏问题的方法。鉴于此类问题广泛存在并影响了众多用户&#xff0c;本文目的是向大家展示不同的修复策略&#xff0c;希望能够帮助每个人解决这些棘手的技术难题。下面一起来看看vcruntim…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

黑豹程序员-ElementPlus选择图标器

ElementPlus组件提供了很多图标svg 如何在你的系统中&#xff0c;用户可以使用呢&#xff1f; 这就是图标器&#xff0c;去调用ElementPlus的icon组件库&#xff0c;展示到页面&#xff0c;用户选择&#xff0c;返回选择的组件名称。 效果 代码 <template><el-inpu…

HarmonyOS ArkTS Button基本使用(十八)

HarmonyOS ArkTS是一种应用于鸿蒙系统的应用开发语言&#xff0c;它在TypeScript的基础上&#xff0c;扩展了声明式UI、状态管理等能力。在HarmonyOS中&#xff0c;Button是一种常用的组件&#xff0c;用于实现页面间的跳转和交互。下面详细介绍HarmonyOS ArkTS中Button的基本使…

深度学习环境指南【1】:Nvidia 驱动

系列文章目录 文章目录 系列文章目录前言选择合适的驱动可能遇到的问题安全模式下删除显卡现有的驱动删除在电脑上安装的 DDU 总结 前言 本文作为深度学习环境指南系列的第一篇文章&#xff0c;主要讲解当你第一次拿到显卡完成装机后需要做的步骤&#xff0c;或者是显卡驱动不…

如何使用GPT提问三元操作符?

英语10分钟&#xff1a; 现在chatgpt非常智能&#xff0c;使用的也越来越广泛&#xff0c;今天学习了使用chatgpt4提问时&#xff0c;应该遵循的提示原则&#xff0c;第一个原则&#xff0c;是要写清晰明确的、具体的说明&#xff0c;第二个原则是要给予模型思考的时间。可以安…

机器学习 - 梯度下降

场景 上一章学习了代价函数&#xff0c;在机器学习中&#xff0c;代价模型是用于衡量模型预测值与真实值之间的差异的函数。它是优化算法的核心&#xff0c;目标是通过调整模型的参数来最小化代价模型的值&#xff0c;从而使模型的预测结果更接近真实值。常见的代价模型是均方…

红黑树,以及其在C++的set、map等数据结构中应用

红黑树介绍&#xff1a; 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff0c;它在插入和删除操作后通过一系列的旋转和着色操作来维持平衡。红黑树的命名来自于节点上的额外颜色属性&#xff0c;每个节点要么是红色&#xff0c;要么是黑色。 红…

【Boost】:searcher的建立(四)

searcher的建立 一.初始化二.搜索功能三.完整源代码 sercher主要分为两部分&#xff1a;初始化和查找。 一.初始化 初始化分为两步&#xff1a;1.创建Index对象&#xff1b;2.建立索引 二.搜索功能 搜索分为四个步骤 分词&#xff1b;触发&#xff1a;根据分词找到对应的文档…

架构设计特训

一、考点分布 软件架构风格&#xff08;※※※※&#xff09;层次型软件架构风格&#xff08;※※※※&#xff09;面向服务的软件架构风格&#xff08;※※※※&#xff09;云原生架构风格&#xff08;※※※※&#xff09;质量属性与架构评估&#xff08;※※※※※&#xff…

Transformer实战-系列教程1:Transformer算法解读1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 Transformer实战-系列教程1&#xff1a;Transformer算法解读1 Transformer实战-系列教程2&#xff1a;Transformer算法解读2 现在最火的AI内容&#xff0c;chatGPT、视觉大模…

网络安全-端口扫描和服务识别的几种方式

禁止未授权测试&#xff01;&#xff01;&#xff01; 前言 在日常的渗透测试中&#xff0c;我们拿到一个ip或者域名之后&#xff0c;需要做的事情就是搞清楚这台主机上运行的服务有哪些&#xff0c;开放的端口有哪些。如果我们连开放的端口和服务都不知道&#xff0c;下一步针…

反洗钱_2_反洗钱国际组织和国际标准

文章目录 二、反洗钱国际组织和国际标准2.1 反洗钱国际组织2.2 反洗钱国际标准2.3 中国与FAFT 二、反洗钱国际组织和国际标准 2.1 反洗钱国际组织 金融行动特别工作组&#xff1a;Financial Action Task Force on Money Laundering (FATF)FATF成立于1989年在巴黎召开的西方七…

206. 反转链表-递归反转链表

206. 反转链表-递归反转链表 解题思路 基本情况处理&#xff1a; 开始时&#xff0c;首先检查链表是否为空或只包含一个节点。若是&#xff0c;直接返回原链表头部。 递归调用&#xff1a; 对于包含两个或更多节点的链表&#xff0c;将递归调用 reverseList 方法&#xff0c;…

Golang切片与数组

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;和数组&#xff08;Array&#xff09;是两个核心的数据结构&#xff0c;它们在内存管理、灵活性以及性能方面有着显著的区别。接下来将解析Golang中的切片与数组&#xff0c;通过清晰的概念解释、案例代码和实际应用场…

Vue2基础

前端技术了解&#xff08;了解&#xff09;ES6常见语法&#xff08;掌握&#xff09;Vue入门&#xff08;掌握&#xff09;Vue表达式&#xff08;掌握&#xff09;Vue指令&#xff08;掌握&#xff09;计算属性与侦听器&#xff08;了解&#xff09; 一、前端技术了解&#xf…

小林Coding_操作系统_读书笔记

一、硬件结构 1. CPU是如何执行的 冯诺依曼模型&#xff1a;中央处理器&#xff08;CPU&#xff09;、内存、输入设备、输出设备、总线 CPU中&#xff1a;寄存器&#xff08;程序计数器、通用暂存器、指令暂存器&#xff09;&#xff0c;控制单元&#xff08;控制CPU工作&am…

[word] word页面视图放大后,影响打印吗? #笔记#学习方法

word页面视图放大后&#xff0c;影响打印吗&#xff1f; word文档的页面视图又叫普通视图&#xff0c;又叫打印视图&#xff0c;是系统默认的视图&#xff0c;是用户用的最多最常见的视图。 问&#xff1a;怎样打开页面视图&#xff1f; 答&#xff1a;两种方法 方法一、点…