Esempio n. 1
0
	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];
	}
}