注意样例+大数乘法+逆向思维

大数乘法

http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571

注意样例

  • 1、当某个为0的时候,需要特判!!
  • 2、注意,要先找到最高位!
  • 3、逆向思维
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        int one=s.size();
        int two=t.size();

        if( 1==one && '0'==s[0] )
        {
            return "0";
        }
        if( 1==two && '0'==t[0] )
        {
            return "0";
        }

        reverse( s.begin(), s.end() );
        reverse( t.begin(), t.end() );


        //表示进位
        int carry=0;
        //vector默认初始化为0
        vector<int> res(one+two);
        fill(res.begin(), res.begin()+one+two, 0);
        for(int i=0; i<one; ++i)
        {
            for(int j=0; j<two ; ++j )
            {
                int first=s[i]-'0';
                int second=t[j]-'0';

                res[i+j]+=first*second;
                carry=res[i+j]/10;
                res[i+j]%=10;

                int loop=i+j+1;
                //可以进位的时候
                while( carry )
                {
                    res[loop]+=carry;
                    carry=res[loop]/10;
                    res[loop]%=10;

                    //MaxPos=max( MaxPos, loop );
                    ++loop;
                }

            }
        }



        string result;
        int pos=one+two-1;
        while( 1 )
        {
            if(res[pos]>0 )
            {
                break;
            }
            else
            {
                --pos;
            }
        }
        //MaxPos+=1;
        do
        {
            result+=('0'+res[pos]);
            --pos;
        }while(pos>=0);

        return result;
    }
};
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务