算法刷题笔记 高精度乘法(C++实现)

news2025/3/17 4:05:49

文章目录

    • 题目描述
    • 解题思路
    • 解题代码

题目描述

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

输入格式

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

输出格式

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

数据范围

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

解题思路

  • 与之前本人博客所记录的 高精度加法 和 高精度减法 类似,实现高精度乘法的算法仍然是对乘法计算的模拟过程。然而,这里模拟的过程与实际乘法竖式计算的过程不同,下面将通过一个例题进行说明。

  • 根据题目所给的数据范围,输入的第一个数字A是一个位数很多的数,可以视为“大数”,而数字B的最大值仅取到10000,可以视为一个“小数”。因此,我们假设A为123,B为12,来模拟通常情况下的乘法竖式计算过程和本题所采用的竖式计算过程。

  • 通常情况下,我们在进行乘法竖式计算时,往往习惯于把位数更长的数字放在上面,如下图左边部分所示。但是,把位数更长的数字放在上面,则会在竖式计算的过程中将其视为一个整体,对于本题中的“大数”是无法进行计算的,因此,只有将“小数”视为整体,与“大数”的各个数位分别相乘,才能使用计算机求解。这种思路相当于把“大数”放在竖式的下面,如下图右边部分所示。
    在这里插入图片描述

  • 每一次乘法结束后,当前位的值一定可以确定,但是有可能产生进位,在计算下一位的值的时候,需要将上一位的进位加上去。

解题代码

#include <iostream>
#include <vector>
using namespace std;

//计算一个大整数和小整数相乘的函数
vector<int> mul(const vector<int>& a, const int& b)
{
    vector<int> result;
    int jinwei(0);
    for(int i(0); i < a.size() || jinwei != 0; ++i)
    {
        if(i < a.size()) jinwei += (a[i] * b);
        result.push_back(jinwei % 10);
        jinwei /= 10;
    }
    return result;
}

int main(void)
{
    //变量定义部分
    string a;
    int b;
    vector<int> a_vector;
    //变量输入部分
    cin >> a >> b;
    for(int i(a.length() - 1); i >= 0; --i) a_vector.push_back(a[i] - '0');
    //获取结果部分
    vector<int> result = mul(a_vector, b);
    while(result[result.size() - 1] == 0 && result.size() > 1) result.pop_back();
    //结果输出部分
    for(int i(result.size() - 1); i >= 0; --i) cout << result[i]; 
    return 0;
}

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

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

相关文章

Putty: 随心御剑——远程启动服务工具plink

一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…

最新:windows下安装pcl点云库

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

【问题解决】ImportError: generic_type: cannot initialize type “ExternalAllocator“

一、问题描述 我的环境是Ubuntu20.04&#xff0c;Cuda版本是11.4&#xff0c;在复现OpenPCDet的时候遇到了下面问题&#xff1a; Traceback (most recent call last):File "train.py", line 7, in <module>from test import repeat_eval_ckptFile "/mnt…

Scala的简单学习一

一 相关知识 1.1 scala的安装 1.在idea中导入依赖&#xff0c;并在Idea下载scala插件 1.2 scala基础知识点 1.scala代码中一行语句的结束是以换行符为标准&#xff0c;可以不用写分号 2.class是一个普通的类&#xff0c;object相当于一个单例对象&#xff0c;object类中的…

git分支策略(github-flow VS git flow,如何选择)

一. 结论 Github flow&#xff1a;最简单 小型项目&#xff0c;持续部署&#xff0c;自动化测试程度高&#xff0c;发布流程简单 Git flow&#xff1a;复杂但最常用 大型项目&#xff0c;发布周期长&#xff0c;需要同时维护多个版本&#xff0c;发布流程复杂 表格提供了不…

36PE启动盘新秀:Ventoy(附各种PE的ISO下载)

PE启动盘新秀:Ventoy(附各种PE的ISO下载) 在我们以前的认知中,一个U盘只能制作包含一个系统的启动盘.比如,安装了微PE工具箱的U盘就不能安装其他什么PE工具箱了.这有时候让我们很无奈,只能买好多U盘,一个U盘一个PE系统. 这个问题的本质是什么?事实上,笔者认为,就是单个的ISO文…

Andoird使用Room实现持久化及使用Room进行增删查改

文章目录 Room概述Room的使用一、在gradle.build中添加依赖库kotlinJava 创建实体类创建抽象Dao层接口创建DataBase层使用创建的查看数据库 总结&#xff1a; 这篇文章会告诉你如何在Android中通过kotlin或者Java来实现数据持久化 Room概述 处理大量结构化数据的应用可极大地受…

2024年【N1叉车司机】考试题及N1叉车司机找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总&#xff0c;相对有效帮助N1叉车司机找解析学员顺利通过考试。 1、【多选题】《特种设备使用…

FreeRTOS 源码概述

FreeRTOS 目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工程中&#xff0c;FreeRTOS 相关的源码如下: 主要涉及2个目录&#xff1a; Core Inc 目录下的 FreeRTOSConfig.h 是配置文件 Src 目录下的 freertos.c 是 STM32CubeMX 创建的默认任务 Middlewares\Third_Party…

深入解析编程逻辑中的关键字与逻辑运算

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、认识关键字及其重要性 二、逻辑运算的关键字 1. and、or 和 not 的运用 2. 逻辑运算的…

42-3 应急响应之服务排查

一、服务排查 服务是后台运行的进程,可在计算机启动时自动启动,也可暂停和重新启动,且不显示用户界面。它们特别适用于长时间运行的功能,以避免影响其他用户在同一台计算机上的工作。在应急响应中,服务常被恶意软件用作驻留方法。 二、Windows服务排查 打开【运行】对话框…

【独家揭秘!玩转ChatGPT?一文带你解锁秘籍!】

&#x1f680;【独家揭秘&#xff01;玩转ChatGPT&#xff1f;一文带你解锁秘籍&#xff01;】&#x1f680; &#x1f449; 【直达ChatGPT体验站】 ChatGPT&#xff0c;全称“Chat Generative Pre-trained Transformer”&#xff0c;是人工智能研究实验室OpenAI于2022年底推出…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

第四课 communcation服务-can配置第二弹

Davinci配置目标: 介绍DBC基本属性,并且配置出一个DBC。 将DBC导入到vector的davinci工具,生成我们想要的代码。 Davinci配置步骤: 1. 编辑DBC文件 DBC文件是一种非常重要的工具,所谓DBC就是Database CAN,CAN网络的数据库文件,定义了CAN网络的节点、消息、信号的所有…

查看远程桌面连接登录不上服务器,远程桌面连接登录不上服务器是什么情况?怎么解决?

在信息技术领域&#xff0c;远程桌面连接&#xff08;RDP&#xff09;是一种重要的远程管理工具&#xff0c;它允许管理员或用户从远程位置访问和控制服务器或计算机。然而&#xff0c;在实际操作中&#xff0c;远程桌面连接不上服务器的情况时有发生&#xff0c;这通常是由多种…

Redis 完整

Redis 什么是 redis ? 是一种基于键值对的 NoSql 型数据库。与 hashMap 不同的是&#xff0c;Redis 中的 value 支持 string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、 list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、zset…

Kafka(十三)监控与告警

目录 Kafka监控与告警1 解决方案1.2 基础知识JMX监控指标代理查看KafkaJMX远程端口 1.3 真实案例Kafka Exporter:PromethusPromethus Alert ManagerGrafana 1.3 实际操作部署监控和告警系统1.2.1 部署Kafka Exporter1.2.2 部署Prometheus1.2.3 部署AlertManger1.2.4 添加告警规…

3D透视图转的时候模型闪动怎么解决?---模大狮模型网

在3D建模与渲染的世界中&#xff0c;透视图是我们观察和操作模型的重要窗口。然而&#xff0c;有时候在旋转透视图时&#xff0c;模型会出现闪动的现象&#xff0c;这不仅影响了我们的工作效率&#xff0c;还可能对最终的渲染效果产生负面影响。本文将探讨这一问题的成因&#…

【Text2SQL 经典模型】HydraNet

论文&#xff1a;Hybrid Ranking Network for Text-to-SQL ⭐⭐⭐ arXiv:2008.04759 HydraNet 也是利用 PLM 来生成 question 和 table schema 的 representation 并用于生成 SQL&#xff0c;并在 SQLova 和 X-SQL 做了改进&#xff0c;提升了在 WikiSQL 上的表现。 一、Intro…

WGCAT工单系统如何配置通知

WGCAT工单系统可以配置邮件通知 只要配置了邮件通知&#xff0c;那么一旦我们账号有新的工单需要处理&#xff0c;就会接受到邮件通知 除了邮件之外&#xff0c;还可以配置其他方式的通知&#xff0c;比如微信钉钉短信等方式&#xff0c;参考如下 https://www.wgstart.com/wgc…