LeetCode43——Multiply Strings(两个字符串表示的整数相乘)???

题目:


参考解法:

法一:

This is the standard manual multiplication algorithm. We use two nested for loops, working backward from the end of each input number. We pre-allocate our result and accumulate our partial result in there. One special case to note is when our carry requires us to write to our sum string outside of our for loop.

At the end, we trim any leading zeros, or return 0 if we computed nothing but zeros.

string multiply(string num1, string num2) {string sum(num1.size() + num2.size(), '0');for (int i = num1.size() - 1; 0 <= i; --i) {int carry = 0;for (int j = num2.size() - 1; 0 <= j; --j) {int tmp = (sum[i + j + 1] - '0') + (num1[i] - '0') * (num2[j] - '0') + carry;sum[i + j + 1] = tmp % 10 + '0';carry = tmp / 10;}sum[i] += carry;}size_t startpos = sum.find_first_not_of("0");if (string::npos != startpos) {return sum.substr(startpos);}return "0";
}

法二:The key part is to use a vector to store all digits REVERSELY. after the calculation, find the rightmost NON-Zero digits and convert it to a string.

class Solution {
public:string multiply(string num1, string num2) {unsigned int l1=num1.size(),l2=num2.size();if (l1==0||l2==0) return "0";vector<int> v(l1+l2,0);for (unsigned int i=0;i<l1;i++){int carry=0;int n1=(int)(num1[l1-i-1]-'0');//Calculate from rightmost to leftfor (unsigned int j=0;j<l2;j++){int n2=(num2[l2-j-1]-'0');//Calculate from rightmost to leftint sum=n1*n2+v[i+j]+carry;carry=sum/10;v[i+j]=sum%10;}if (carry>0)v[i+l2]+=carry;}int start=l1+l2-1;while(v[start]==0) start--;if (start==-1) return "0";string s="";for (int i=start;i>=0;i--)s+=(char)(v[i]+'0');return s;}
};

分析:

两个数相乘,最后的结果的长度,最大为两个乘数的长度之和。








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

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

相关文章

关键字restrict简介

c99中新增加了一个类型定义&#xff0c;就是restrict。 restrict的定义是It can be applied only to pointers, and it indicates that a pointer is the sole initial means of accessing a data object. 我不知道确切应该怎么翻译&#xff0c;大意是restrict只对指针有用&…

Windows-server-2008-R2安装Oracle-11g-R2-dataguard

一、安装环境 1、服务器环境&#xff1a;Windows server 2008 R2 x64 Standard 两台 CPU&#xff1a;8核 内存&#xff1a;8G 硬盘空间&#xff1a;1060G 2、软件&#xff1a;oracle 11g R2 二、安装前配置 1、IP地址配置要求 主库IP&#xff1a;192.168.2.50 备库IP&#xff1…

LeetCode66——Plus One(一个整数用数组存储,然后在末尾加1)

题目&#xff1a; 参考解法&#xff1a; class Solution { public:vector<int> plusOne(vector<int>& digits) {bool carry true;for(int idigits.size()-1; i > 0 && carry; i--) {carry (digits[i]%10) 0;}if(carry) {digits.insert(digits.be…

项目中CI缓存适配器的使用

2019独角兽企业重金招聘Python工程师标准>>> 项目中CI缓存适配器的使用 项目中有若干控制器&#xff0c;这些控制器有一些公共数据&#xff0c;因此&#xff0c;在基控制器类中获取这些数据&#xff0c;为了提高系统性能&#xff0c;使用了缓存系统&#xff0c;采…

VS2008中V表结束标记的分析

VS2008中V表结束标记的分析 在逆向C目标时&#xff0c;我们有时候可能会关注一个V表中到底有多少个虚函数。 这种细节大概多半是与编译器实现相关。 为了弄清楚这个问题&#xff0c;我在VS2008下写了一个简单的测试程序来探求这个问题的答案。 下面是C的测试程序源码&#xff1…

康奈尔笔记法

一页有三栏&#xff1a;主栏、副栏、思考栏。主栏主要是在右上角&#xff0c;主要记录学到的内容。副栏在左边&#xff0c;主要是简单概括重点。思考栏在底部&#xff0c;主要是记录收获、感悟。 主栏&#xff1a;在听讲或阅读时把重要的内容或知识的要点记录在右侧的区域&…

string类的常用函数

string类的构造函数&#xff1a; string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外&#xff0c;string类还支持默认构造函数和复制构造函数&#xff0c;如string s1&#xff1b;string s2"hello"&#xff1b;都是正…

Memcached 内存管理(一)

2019独角兽企业重金招聘Python工程师标准>>> Memcached是一个高效的分布式内存cache&#xff0c;了解memcached的内存管理机制&#xff0c;便于我们理解memcached&#xff0c;让我们可以针对我们数据特点进行调优&#xff0c;让其更好的为我所用。这里简单谈一下我对…

相同字符串的string对象不等

今天遇到一个问题&#xff0c;用复制构造函数构造出来的String和同一个字符串的string对象居然不相等&#xff0c;即A和B是相同字符串的string,调用Cstring(A)之后&#xff0c;C和B不相等。 后来改成C string(A.c_str())后&#xff0c;C和B才相等转载于:https://www.cnblogs.c…

jitter 如何优化网络_网络推广如何做好网站SEO优化

网络推广做好网站整站SEO优化的方式有很多&#xff0c;如何才能做好SEO优化&#xff1f;网络推广如何做好网站SEO优化一、定位网站关键词SEO给一个网站刚开始做优化的时候&#xff0c;不是立马就设置关键词&#xff0c;而是先分析该网站主要是做什么产品/服务。知道网站的目的是…

PHP+Mysql查询上一篇和下一篇文章实例

PHPMysql查询上一篇和下一篇文章实例 简单的PHPMysql查询上一篇和下一篇文章实例&#xff0c;并输出上一篇和下一篇文章的标题和链接&#xff0c;适合新手学习获取当前浏览文章id&#xff1a; 1 $id isset($_GET[id]) > 0 ? intval($_GET[id]) : ""; 下一篇文章…

openssh-在win7上的搭建

2019独角兽企业重金招聘Python工程师标准>>> 参考 http://www.cnblogs.com/ericsun/archive/2012/06/10/2544413.html 1.下载OpenSSH&#xff1a;http://sourceforge.net/projects/sshwindows/files/OpenSSH%20for%20Windows%20-%20Release/3.8p1-1%2020040709%20B…

LeetCode8——String to Integer (atoi)(自己编写atoi函数)

题目&#xff1a; 参考解法&#xff1a; I think we only need to handle four cases: discards all leading whitespaces sign of the number overflow invalid input int myAtoi(char* str) {int sign 1, base 0, i 0;while (str[i] ) { i; }//去掉空格if (str[i…

5类6类7类网线对比_孩子们长高的黄金时期是从3月到5月,这阶段多吃6类食物长得快...

原标题&#xff1a;孩子们长高的黄金时期是从3月到5月&#xff0c;这阶段多吃6类食物长得快每个家长都希望孩子长大。当他们看到自己的孩子比同龄的孩子矮时&#xff0c;他们会非常担心。他们特别担心孩子的成长。事实上&#xff0c;儿童的生长发育有明显的季节性&#xff0c;一…

javascript之Partial Application

这一次来学习一下Partial Application。我们先看一下函数的介绍&#xff0c;在维基上有简单的介绍&#xff1a; 在数学中&#xff0c;一个函数是描述每个输入值对应唯一输出值的这种对应关系&#xff0c;符号为 f(x)。例如&#xff0c;表达式 f(x)x2表示了一个函数 f&#xff0…

根据对象的属性去重,获取新数组

() let cateArr arr.reduce(function (arr, current) { hash[current.category_id] ? : hash[current.category_id] true && arr.push(current); return arr }, []); () 转载于:https://www.cnblogs.com/gkxNB/p/11428433.html

快速地创建快顶尖的医学图像处理控件ImageGear Medical

ImageGear Medical控件使开发人员能够快速地创建快顶尖的医学图像处理控件&#xff0c;可以对DICOM文件进行浏览、创建、编辑&#xff0c;可以控制图像所有切面显示和打印&#xff0c;对图像进行注释&#xff0c;以及支持ISIS和TWAIN扫描和100多种图像文件格式&#xff0c;可用…

jj为什么会变大变小_为什么上过太空的种子果实会变大?射线会让生物向大变异吗?...

在科幻电影中&#xff0c;变异是不正常力量的重要来源之一&#xff0c;所谓“富人靠科技&#xff0c;穷人靠变异&#xff01;”。但其实科幻在某种意义上一起在误导着我们&#xff0c;多数科幻作品其实是以科学为外衣的魔法故事&#xff0c;比如“爱你三千遍”的钢铁侠&#xf…

公司人才招聘管理系统

课程设计名称 公司人才招聘管理系统 完成时间&#xff08;起、止&#xff09; 所属小组 课程设计的目的 1、学习和巩固C语言程序设计的方法&#xff0c;充分体会C语言在程序设计方面的强大功能和独特之处&#xff1b; 2、了解用C语言开发项目的一般过程&#xff0c;…

RabbitMQ 示例-生产者-消费者-direct-topic-fanout

这是生产者和消费者2个项目&#xff0c; 包含 direct&#xff0c;topic&#xff0c;fanout模式下的消费&#xff0c;springboot rabbitmq 代码地址&#xff1a;https://github.com/duende99/RabbitMQ.git转载于:https://www.cnblogs.com/duende99/p/11440435.html