NC10. 大数乘法
描述
示例1
输入:
"11","99"
输出:
"1089"
说明:
11*99=1089示例2
输入:
"1","0"
输出:
"0"
C 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-02
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 */ char* solve(char* s, char* t ) { // write code here int sl = strlen(s); int tl = strlen(t); int rs[sl+tl]; for(int i=0;i<(sl+tl);i++){ rs[i] = 0; } char *result = (char*)malloc((sl + tl) * sizeof(char)); for (int i=0;i<sl;i++){ for (int j=0;j<tl;j++){ rs[i+j+1] += (s[i] - '0') * (t[j] - '0'); } } for (int i=(sl+tl-1); i>0;i--) { result[i] = rs[i] % 10 + '0'; rs[i - 1] += rs[i] / 10; } result[0] = rs[0] + '0'; for (int i=0;i<(sl+tl); i++) { if(*result != '0' || i == (sl + tl - 1)){ break; }else{ result++; } } return result; }
C++ 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2022-08-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */ string toString(vector<int>& num){ bool iszero = true; string res{}; for (int i = 0; i < num.size(); i++){ if(num[i] > 0){ iszero = false; } if(!iszero){ res += to_string(num[i]); } } if(res.empty()){ return "0"; } return res; } string solve(string s, string t) { // write code here reverse(s.begin(), s.end()); reverse(t.begin(), t.end()); int len1 = s.size(); int len2 = t.size(); vector<int> num(len1 + len2, 0); for (int i = 0; i < len1; i++){ for (int j = 0; j < len2; j++){ num[i+j] += (s[i] - '0')*(t[j] - '0'); } } int carry = 0; for (int i = 0; i < len1 + len2; i++){ num[i] = num[i] + carry; carry = num[i] / 10; num[i] = num[i] % 10; } if(num.back() == 0){ num.erase(num.end() - 1); } reverse(num.begin(), num.end()); return toString(num); } };
C++ 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2022-04-22
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here int sl = s.length(), tl = t.length(); if(s == "0" || t == "0") return "0"; else if(sl == 1 && tl == 1) return to_string(stoi(s) * stoi(t)); reverse(s.begin(), s.end()); reverse(t.begin(), t.end()); vector<int> list(sl + tl); for(int i = 0; i < sl; i++) { for(int j = 0; j < tl; j++) { int si = s[i] - '0', ti = t[j] - '0'; list[i + j] += si * ti; } } // for(int i = 0; i < sl + tl; i++) { // cout << list[i]; // } string res = ""; for(int i = 0; i < sl + tl; i++) { if(list[i] > 9) { list[i+1] += list[i] / 10; list[i] %= 10; } } for(int c:list) res += c + '0'; reverse(res.begin(), res.end()); if(res[0] == '0') res = res.substr(1); return res; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2022-06-11
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here int m = s.length(); int n = t.length(); if(s=="0" || t=="0") return "0"; vector<int> ans(m+n); for(int i=m-1;i>=0;i--){ for(int j=n-1;j>=0;j--){ ans[m+n-2-i-j] += (s[i]-'0')*(t[j]-'0'); } } for(int i=0;i<ans.size()-1;i++){ ans[i+1] += ans[i]/10; ans[i] = ans[i]%10; } string ss = ""; int i=ans.size()-1; while(ans[i]==0) i--; for(;i>=0;i--){ ss += ans[i]+'0'; } return ss; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 436KB, 提交时间: 2021-09-07
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here int slen = s.size(); int tlen = t.size(); if(slen == 0 || tlen == 0) return ""; if(s=="0" || t == "0") return "0"; int len = slen + tlen-1; int num[len]; for(int i=0;i<len;i++) num[i] = 0; //初始赋值很重要 for(int i=0;i<slen;i++) { for(int j=0;j<tlen;j++) num[i+j] += (s[i]-'0') * (t[j] - '0'); } //int end = num[0]==0?1:0; string res; int carry = 0; for(int i=len-1;i>=0;i--) { int tmp = num[i] + carry; res.append(1,tmp%10 + '0'); carry = tmp/10; } if(carry != 0) res.append(1,carry + '0'); reverse(res.begin(), res.end()); while(res[0] == '0') res = res.substr(1); //这个也很重要。 return res; } };