码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode | Multiply Strings

时间:2014-05-11 14:35:13      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

还是不要想得太复杂。一开始还想着要4位4位二分去做。其实只要一位一位地乘,小心地维护好进位就好。

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     string multiply(string num1, string num2) {

 4         if (num1.empty()) return "";
 5         if (num2.empty()) return "";
 6         int m1, m2, carry, val;
 7         
 8         reverse(num1.begin(), num1.end());
 9         reverse(num2.begin(), num2.end());
10         string ret(num1.length() + num2.length(), 0);
11         for (int i = 0; i < num2.length(); ++i) {
12             m2 = num2[i] - 0;
13             carry = 0;
14             for (int j = 0; j < num1.length(); ++j) {
15                 m1 = num1[j] - 0;
16                 val = m2 * m1 + carry + ret[i + j] - 0;
17                 ret[i + j] = val % 10 + 0;
18                 carry = val / 10;
19             }
20             ret[i + num1.length()] += carry;
21         }
22 
23         string r = "0";
24         for (int i = ret.length() - 1; i >= 0; --i) {
25             if (ret[i] != 0) {
26                 r = ret.substr(0, i + 1);
27                 break;
28             }
29         }
30         reverse(r.begin(), r.end());
31         return r;
32     }
33 };
bubuko.com,布布扣

reverse主要是便于取下标。

第10行,注意结果最大长度就是两个串的长度和;

第16行,注意每个位置需要加上ret[i+j]-‘0‘; 第17行,直接等于新的余数;

第20行,记得要把最后的进位保存下来;

第23行,如果从后往前扫一直没找到非零的数,那么证明结果为0,所以默认值设为‘0‘;

Leetcode | Multiply Strings,布布扣,bubuko.com

Leetcode | Multiply Strings

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/linyx/p/3720967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!