string multiply(string num1, string num2) { int n = num1.size(); int m = num2.size(); string ret(n + m, '0'); vector<int> nums1(n); vector<int> nums2(m); vector<int> nums3(m + n, 0);; for (int i = 0; i < n; i++)nums1[i] = num1[n - i - 1] - '0'; for (int i = 0; i < m; i++)nums2[i] = num2[m - i - 1] - '0'; for (int i = 0; i < num1.size(); i++) for (int j = 0; j < num2.size(); j++) { nums3[i + j] += nums1[i] * nums2[j]; nums3[i + j + 1] += nums3[i + j] / 10; nums3[i + j] %= 10; } for (int i = 0; i<n + m; i++) ret[i] += nums3[i]; int index = ret.size(); while (index>1 && ret[--index] == '0') ret.pop_back(); reverse(ret.begin(), ret.end()); return ret; }
double MedianOfTwoSortedArrays::findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int i=0,j=0,k=0; int Len=nums1.size()+nums2.size(); vector<int> nums3(Len); while ((i<nums1.size())&&(j<nums2.size())) { if (nums1[i]<=nums2[j]) { nums3[k]=nums1[i]; k++;i++; } else { nums3[k]=nums2[j]; k++;j++; } } while (i<nums1.size()) { nums3[k++]=nums1[i++]; } while (j<nums2.size()) { nums3[k++]=nums2[j++]; } if ((nums1.size()+nums2.size())%2==0) { return (nums3[(Len-1)/2]+nums3[Len/2])/(double)2.0; } else { return (double)nums3[Len/2]; } }