力扣题:高精度运算-1.3

力扣题-1.3

[力扣刷题攻略] Re:从零开始的力扣刷题生活

力扣题1:43. 字符串相乘

解题思想:类似计算时采用的竖式乘法。首先取得num2的低位,并补齐对应的0,然后与num1进行相乘,然后进行字符串的相加操作。

在这里插入图片描述

class Solution(object):def multiply(self, num1, num2):""":type num1: str:type num2: str:rtype: str"""## 如果其中有个为0,则相乘后得0if num1 == "0" or num2 == "0":return "0"## 定义ans作为最后的返回值ans = "0"m = len(num1)n = len(num2)## 从低位开始遍历num2,用一位与num1进行乘法for i in range(n-1,-1,-1):add = 0y = int(num2[i])curr = ['0']*(n-1-i)## 与num1进行乘法操作for j in range(m-1,-1,-1):x = int(num1[j])temp = x*y+addcurr.append(str(temp%10))add = temp // 10if add > 0:curr.append(str(add))## 因为是通过append添加的最后需要进行翻转curr = "".join(curr[::-1])## 字符串的加法操作ans = self.addStrings(ans,curr)return ansdef addStrings(self, num1, num2):## 进行字符串的加法操作,从低位开始相加i, j = len(num1) - 1, len(num2) - 1add = 0ans = list()while i >= 0 or j >= 0 or add != 0:x = int(num1[i]) if i >= 0 else 0y = int(num2[j]) if j >= 0 else 0result = x + y + addans.append(str(result % 10))add = result // 10i -= 1j -= 1## 最后需要进行翻转return "".join(ans[::-1])
class Solution {
public:string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0") {return "0";}string ans = "0";int m = num1.length();int n = num2.length();for (int i = n - 1; i >= 0; i--) {int add = 0;int y = num2[i] - '0';string curr(n - 1 - i, '0');for (int j = m - 1; j >= 0; j--) {int x = num1[j] - '0';int temp = x * y + add;curr.push_back(temp % 10 + '0');add = temp / 10;}if (add > 0) {curr.push_back(add + '0');}reverse(curr.begin(), curr.end());ans = addStrings(ans, curr);}return ans;}string addStrings(string num1, string num2) {int i = num1.length() - 1;int j = num2.length() - 1;int add = 0;string result;while (i >= 0 || j >= 0 || add != 0) {int x = (i >= 0) ? num1[i] - '0' : 0;int y = (j >= 0) ? num2[j] - '0' : 0;int sum = x + y + add;result.push_back(sum % 10 + '0');add = sum / 10;i--;j--;}reverse(result.begin(), result.end());return result;}
};

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

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

相关文章

D6208双向直流马达驱动芯片 用于IPC产品,可兼容BA6208,噪声低 ,工作电源电压范围宽。

D6208 是一块单片双向马达驱动电路,它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动,功率输出部分根据逻辑控制能提供100mA(典型值&a…

Agilent安捷伦E4990A阻抗分析仪20Hz

Agilent安捷伦E4990A阻抗分析仪性能卓越,适用于元器件、半导体和材料测量。它具有宽广的频率范围,从20Hz到120MHz,能够适应各种不同的阻抗测量需求。在宽阻抗范围内,该仪器能够提供出色的0.045%(典型值)基本…

cesium粒子爆炸效果

效果: //添加爆炸模型window.swpecesium.addEntity.addModel({id: "model",position: {lon: 116.34516786934411,lat: 39.99753297677145,},config: {url: "./model/baozha/scene.gltf",minSize: 200,maxSize: 300,},});var scene viewer.scen…

性能优化-OpenMP概述(一)-宏观全面理解OpenMP

本文旨在从宏观角度来介绍OpenMP的原理、编程模型、以及在各个领域的应用、使用、希望读者能够从本文整体上了解OpenMP。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础…

MySQL-数据库概述

数据库相关概念: 数据库(DateBase)简称DB,就是一个存储数据的仓库,数据有组织的进行存储。 数据库分为关系型数据库简称RDBMS和非关系型数据库 关系型数据库简称RDBMS:建立在关系模型的基础上,由多张相互连接的二维表组成的数据库.简单来说…

民营体检@2023/24:革新、挑战与本质回归

【潮汐商业评论/原创】 被“健康焦虑”困扰的Joy决定给自己来一次全身的检查,在网上一搜才发现,不仅是体检机构,现在各大医院也都可以体检。“感觉价格也都差不多,是选公立还是体检机构呢?”Joy陷入疑惑。 随着近几年…

c++之迭代器

目录 一、迭代器 二、几种常见的迭代器类型 三、使用迭代器时注意事项 一、迭代器 在C中,迭代器是一种用于遍历容器元素的对象。迭代器提供了一种通用的方式来访问各种不同类型的容器,如数组、向量、列表、集合和映射等。 使用迭代器可以避免直接操作…

【数据库原理】(9)SQL简介

一.SQL 的发展历史 起源:SQL 起源于 1970 年代,由 IBM 的研究员 Edgar F. Codd 提出的关系模型概念演化而来。初期:Boyce 和 Chamberlin 在 IBM 开发了 SQUARE 语言的原型,后发展成为 SQL。这是为了更好地利用和管理关系数据库。…

open3d连线可视化

目录 写在前面准备代码运行结果参考完 写在前面 1、本文内容 open3d 2、平台/环境 windows10, visual studio 2019 通过cmake构建项目,跨平台通用;open3d 3、转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/135407857…

【Java】知识——各类编码格式以及样例

一、 #ASCII 码 计算机内所有的信息都是二进制位。一个字节包含 8 个二进制位,可以表示 256 个状态,每个状态表示一个符号。 ASCII 码一共规定了128个字符的编码,比如空格 SPACE 是32(二进制00100000),大写…

熟悉常用的Linux操作和Hadoop操作

1. 安装虚拟机 (1) VMware workstation pro安装包下载 登录VMware 官网:VMware 中国 - 交付面向企业的数字化基础 | CN,点击登录->云服务控制台,进入欢迎使用VMware页面,点击创建您的VMWARE账户,进入注册界面填写信息并注册。注册完成后,返回登录页面进行登录,进入VM…