牛客题霸 [ 大数乘法] C++题解/答案

题目描述

以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。
(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)

题解:

高精度问题的基本模板
本质就是模拟手算乘法的过程,先乘对应位,然后%10进位
虽然是模板,但是我调了好久。。不知道哪错了

代码:

class Solution {
   
public:
    /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */
    string solve(string s, string t) {
   
        // write code here
        if(s=="0"||t=="0")return "0";
        int len1=s.size();
        int len2=t.size();
        string a="";
        vector<int>num(len1+len2,0);
        for(int i=len1-1;i>=0;i--)
        {
   
            for(int j=len2-1;j>=0;j--)
            {
   
                num[i+j+1]+=(s[i]-'0')*(t[j]-'0');
                num[i+j]+=num[i+j+1]/10;
                num[i+j+1]%=10;
                
            }
        }
        int i=0;
        bool f=0;
            while(i<num.size())
            {
   
                if(i==0&&num[i]!=0)f=1;
                if(num[i]==0&&f==0)
                {
   
                    i++;
                    f=1;
                }
                else a.push_back(num[i++]+'0');
            }
           return a;
    }
};