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

Multiply Strings

时间:2015-06-11 19:09:00      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

这道题就是模拟乘法思维了,还需要模拟加法思维,每一位乘以一个数都要和前面的结果加起来。

注意:

1 要把这两个操作过程分清楚,不能混饶了,否则会结果不正确的。

2 乘法有进位,和前面的结果加起来也有加法进位,一定要分清楚。

3 每一次一个新数位与被乘数相乘之前,都一定要把两个进位加在结果上。

4 同时需要把两个进位值都清零。

class Solution {
public:
    string multiply(string num1, string num2) {
        int n1 = num1.length();
        int n2 = num2.length();
        if(n1 == 0 || n2 == 0) return "0";
        int upto = 0;
        int sumupto = 0;
        string sum;
        int s = 0;
        sum.resize(n1+n2, 0);
        int i, j;
        for (i = n1-1; i >= 0; i--)
        {
            int a = num1[i] - 0;
            //注意:每次新开始upto进位值都要清零
            for (j = n2-1, upto = 0; j >= 0; j--)
            {
                int b = num2[j] - 0;
                s = b * a + upto;
                upto = s / 10;
                //注意:要系统分析,先计算出乘法,处理好,之后再处理加法。

                int rmd = s%10;
                int sij1 = sum[i+j+1] - 0;
                int rs = rmd + sij1 + sumupto;

                sumupto = rs/10;
                rs %= 10;
                sum[i+j+1] = rs + 0;                
            }
            //注意:把最后一次的进位值加上!
            //注意:要把加法进位和乘法进位都加上
            sum[i+j+1] += (upto+sumupto);
            //注意:加法进位一定需要清零
            sumupto = 0;
        }
        while (sum.length() > 1 && sum[0] == 0) sum.erase(sum.begin());

        return sum;
    
        
    }
};

 

Multiply Strings

标签:

原文地址:http://www.cnblogs.com/qiaozhoulin/p/4569641.html

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