#leetcode刷题之路43-字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
#include <iostream> #include <string.h> using namespace std; string multiply(string num1, string num2) { int l1=num1.length(); int l2=num2.length(); int i; string ans; if(l1 == 0 || l2 == 0) return ""; if(num1 == "0" || num2 == "0") return "0"; int *t = new int[l1+l2]; //memset(t,0, (l1+l2)* sizeof(int)); fill(t,t+l1+l2,0); for(i = l1-1; i >=0; i--) {//从个位向前 for(int j =l2-1; j >=0; j--) {//从个位向前 int multi = (num1[i]-'0') * (num2[j]-'0');//存对应的数字相乘的结果 multi += t[i+j+1];//先把这一次的值加上之前的最后一位,看会不会进位 t[i+j] += multi/10; t[i+j+1] = multi % 10; } } i = 0; while(i < l1+l2 && t[i] == 0) i++;//找到非零数的位置 for(; i < l1+l2; i++) ans+=to_string(t[i]); return ans; } int main() { string s1="123"; string s2="456"; string ans=multiply(s1,s2); std::cout << ans << std::endl; return 0; }