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. usb帧格式

    源: usb帧格式

  2. selenium webdriver 实现Canvas画布自动化测试

    https://blog.csdn.net/xiaoguanyusb/article/details/80324210 由借鉴意义, 转过来 canvas 是一个画布,定位元素时只能定位到画布上,如下 ...

  3. Markdown语法学习(Github/git.oschina.net上README.md书写规范)(转)

    晚上在更新git.oschina.net项目时,突然想知道README.md后缀的来源,于是搜了下,发现README.md使用了一种小标记语言Markdown的语法,于是简单的看了一个,特转载如下,为 ...

  4. windows模糊查询指定进程是否存在

    习惯的查询 wmic process | findStr /i "**" /i 忽略大小写 我查考的链接 常用批处理命令总结3之Find和FindStr

  5. host文件的作用

    什么是host文件 Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Host ...

  6. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem A - B

    Array of integers is unimodal, if: it is strictly increasing in the beginning; after that it is cons ...

  7. Python3基础 dict 创建字典 空字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  8. 《OFFER14》14_CuttingRope

      // 面试题14:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k ...

  9. 分布式事务框架&解决方案参考

    两种开源解决方案框架介绍: https://blog.csdn.net/zyndev/article/details/79604395#_97 LCN: https://www.jianshu.com ...

  10. R语言 apply,sapply,lapply,tapply,vapply, mapply的用法

    apply() apply(m,dimcode,f,fargs) m 是一个矩阵. dimcode是维度编号,取1则为对行应用函数,取2则为对列运用函数. f是函数 fargs是f的可选参数集 > ...