class Solution {
public:
string multiply(string num1, string num2) {
string zero = "";//特殊情况
if (num1[] == '' || num2[] == '')
return zero; int len1 = num1.size();
int len2 = num2.size();
char **str = new char*[len2];//建立一个二维的len2*(len1+len2+1)的数组,这里的建立和赋值是教学局了,学习
for (int i = ; i < len2; i++)
{
str[i] = new char[len1 + len2 + ];
memset(str[i], '', len1 + len2);//初始化赋值
str[i][len1 + len2] = '\0';//实际用到的只有len1+len2的长度,但是多出一位赋值‘\0’ } for (int i = len2 - ; i >= ; i--)//这个双重循环目的是用len2里每个值乘len1整体,并保存在二维数组行中
{
for (int j = len1 - ; j >= ; j--)//至于实现,就是模拟乘法中的每一位相乘,从后向前
{
int ans = (num1[j] - '')*(num2[i] - '');
str[i][i + j + ] += ans % ;//注意这里索引位置,要考虑非个位数值乘法,后面是要补零的
str[i][i + j] += ans / ;
if (str[i][i + j + ] > '')
{
str[i][i + j] += ;
str[i][i + j + ] = str[i][i + j + ] - '' + '' - ;//这里之前忘了-1
}
}
} for (int i = ; i < len2 - ; i++)//这里的双重循环目的是将之前保存的,每个位置的乘法结果相加,还是两两相加,所以返回是最后一行
{
for (int j = len1 + len2 - ; j >= ; j--)
{
str[i + ][j] += (str[i][j] - '');
if (str[i + ][j] > '')
{
str[i + ][j - ] += ;
str[i + ][j] = str[i + ][j] - '' + '' - ;
}
}
} int i = ;
while (str[len2 - ][i] == '')//把最后一层开头的0都去掉
{
for (int j = ; j < len1 + len2; j++)
str[len2 - ][i + j] = str[len2 - ][i + j + ];
}
return str[len2 - ];
}
};

分析:

这题我写了半天,不是思想有问题,主要部分第一时间就写好了,就卡在二维数组建立上了,不知道为啥string不方便,只好改用char,用了char初始化还不让我循环初始化,只好用memset,下面的就是忘了对超出'9'的复位后-1,其他就没啥了,感觉这个题思想很简单,考的是编程能力。

leecode第四十三题(字符串相乘)的更多相关文章

  1. leecode第五十三题(最大子序和)

    class Solution { public: int maxSubArray(vector<int>& nums) { int len=nums.size(); )//特殊情况 ...

  2. leecode第三十三题(搜索旋转排序数组)

    class Solution { public: int search(vector<int>& nums, int target) { int len=nums.size(); ...

  3. 《剑指offer》第四十三题(从1到n整数中1出现的次数)

    // 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12 ...

  4. 代码题(59)— 字符串相加、字符串相乘、打印最大n位数

    1.415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 思路:和链表相加类似,求进位. class Solution { public: string addS ...

  5. 《剑指Offer》题四十一~题五十

    四十一.数据流中的中位数 题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中 ...

  6. C Primer Plus_第四章_字符串和格式化输入输出_编程练习

    Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...

  7. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. CTF---Web入门第十三题 拐弯抹角

    拐弯抹角分值:10 来源: cwk32 难度:易 参与人数:5765人 Get Flag:2089人 答题人数:2143人 解题通过率:97% 如何欺骗服务器,才能拿到Flag? 格式:CTF{} 解 ...

  9. <<Effective Java>> 第四十三条

    <<Effective Java>> 第四十三条:返回零长度的数组或者集合,而不是null 如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长 ...

随机推荐

  1. Web开发笔记 #08# Jackson组合多个对象的属性构成JSON(以及添加自定义属性)

    参考文档:https://github.com/FasterXML/jackson-databind 关于ObjectMapper的线程安全 截自官方文档: 组合多个对象的属性构成JSON(以及添加自 ...

  2. Linux学习笔记之在 CentOS 里下载 RPM 包及其所有依赖包

    0x00 概述 前几天我尝试去创建一个仅包含我们经常在 CentOS 7 下使用的软件的本地仓库.当然,我们可以使用 curl 或者 wget 下载任何软件包,然而这些命令并不能下载要求的依赖软件包. ...

  3. Golang闭包案例分析与普通函数对比

    闭包案例 package main import ( "fmt" "strings" //记住一定引入strings包 ) //①编写一个函数makeSuffi ...

  4. c++ linux下输出中文

    同样,使用的是VS FOR LINUX进行测试. converting to execution character set: Invalid or incomplete multibyte or w ...

  5. VIM自动补全Python代码

    pydiction插件 https://codeload.github.com/rkulla/pydiction/zip/master 新建bundle文件夹 mkdir ~/.vim/bundle ...

  6. mtr 命令

    mtr命令的使用: -r  --report  以报告的方式发布监测的结果 -s 30   指定发送包的大小  这个随意   按照自己的需求 -i 10  设置icmp协议返回包的时间 -n  no- ...

  7. c++map用法

    #include<iostream> #include<algorithm> #include<map> using namespace std; void fun ...

  8. Flask学习【第9篇】:Flask-script组件

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...

  9. linux内核中的cfq输入输出调度算法

    1. 全称是什么? 完全公平调度算法(completely fair queuing) 2. 原理是怎样的? 先按照输入输出请求的地址进行排序,然后按排好的次序执行请求 3. 适用场景 适用于旋转式磁 ...

  10. 放棋子|2012年蓝桥杯B组题解析第七题-fishers

    (13')放棋子 今有 6 x 6 的棋盘格.其中某些格子已经预先放好了棋子.现在要再放上去一些,使得:每行每列都正好有3颗棋子.我们希望推算出所有可能的放法.下面的代码就实现了这个功能. 初始数组中 ...