亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

leecode 解題總結:43. Multiply Strings

2019-11-10 17:08:24
字體:
來源:轉載
供稿:網友
#include <iostream>#include <stdio.h>#include <vector>#include <sstream>#include <algorithm>using namespace std;/*問題:Given two non-negative integers num1 and num2 rePResented as strings, return the product of num1 and num2.Note:The length of both num1 and num2 is < 110.Both num1 and num2 contains only digits 0-9.Both num1 and num2 does not contain any leading zero.You must not use any built-in BigInteger library or convert the inputs to integer directly.分析:這道題目是兩個字符串對應的整數相乘,這個是大整數乘法。那么接下來就要分析乘法是如何處理的。設兩個乘數中位數較多的為num1,位數較少的乘數為num2,那么可以把num2的每一位分解,然后用每一位分別乘以乘數,保存計算的結果。num1 * num2的個位,記錄結果R1num1 * num2的十位,記錄結果R2,R2后面再添1個0...num1 * num2的n位,記錄結果Rn,Rn后面添n-1個0對R1~Rn進行累加,記錄進位pass,計算最終的結果之前是用一個數組來做,每個元素保留4位,然后記錄進位結果120 * 75=9000	120	 75    600   840   9000輸入:120 750 99133 0輸出:9000810關鍵:1 一種簡單解法:兩個數相乘,乘積的位數最多為兩個數的位數之和因此得到計算第i+j+1位tmp = (sum[i + j + 1] - '0') + (num1[i] - '0')*(num2[j] - '0') string sum(size1 + size2 , '0');//設定初始結果for(int i = size1 - 1 ; i >= 0 ; --i){	carry = 0;	for(int j = size2 - 1 ; j >= 0 ; j--)	{		temp = (sum[i + j + 1] - '0') + (num1.at(i) - '0') * (num2.at(j) - '0') + carry;//不要漏了進位		sum[i + j + 1] = temp % 10 + '0';//這里直接用 % . /不需要判斷		carry = temp / 10;	}	//這里最后的進位要加上,這里i對應的是最高位,比如75 * 120,5對應倒數第一位,5*120=600占據3位,由于沒有進位,無需占據第2位的進位	sum[i] += carry;}size_t pos = sum.find_first_not_of("0");//找到結果真正起始位置*/class Solution {public:    string multiply(string num1, string num2) {        if(num1.empty() || num2.empty())		{			return "";		}		int size1 = num1.size();		int size2 = num2.size();		int temp;		int carry = 0;		string sum(size1 + size2 , '0');//設定初始結果		for(int i = size1 - 1 ; i >= 0 ; --i)		{			carry = 0;			for(int j = size2 - 1 ; j >= 0 ; j--)			{				temp = (sum[i + j + 1] - '0') + (num1.at(i) - '0') * (num2.at(j) - '0') + carry;//不要漏了進位				sum[i + j + 1] = temp % 10 + '0';//這里直接用 % . /不需要判斷				carry = temp / 10;			}			//這里最后的進位要加上,這里i對應的是最高位,比如75 * 120,5對應倒數第一位,5*120=600占據3位,由于沒有進位,無需占據第2位的進位			sum[i] += carry;		}		size_t pos = sum.find_first_not_of("0");//找到結果真正起始位置		if(string::npos != pos)		{			return sum.substr(pos);		}		return "0";	}};void process(){	string num1;	string num2;	Solution solution;	while(cin >> num1 >> num2)	{		string result = solution.multiply(num1 , num2);		cout << result << endl;	}}int main(int argc , char* argv[]){	process();	getchar();	return 0;}/*class Solution2 {public:    string multiply(string num1, string num2) {        if(num1.empty() || num2.empty())		{			return "";		}		//如果乘數中有1個為0,直接輸出0		if(num1 == "0" || num2 == "0")		{			return "0";		}		int len1 = num1.length();		int len2 = num2.length();		string maxNum = len1 > len2 ? num1 : num2;		string minNum = len1 > len2 ? num2 : num1;//這里易錯		int maxLen = len1 > len2 ? len1 : len2;		int minLen = len1 < len2 ? len1 : len2;		vector<string> results;		string result;		int value1;		int value2;		int pass;		int digitValue;//當前位的值		//位數較少的乘數的每一位乘以另一個乘數的每一位		for(int i = minLen - 1 ; i >= 0 ; i--)		{			result = "";			value1 = minNum.at(i) - '0';			pass = 0;			stringstream stream;			//乘以的時候必須逆序,例如乘以120,必須從0開始乘			for(int j = maxLen - 1 ; j >= 0 ; j--)			{				//比如 "120" * "5" = "600",注意這里不能直接轉化為整數乘法,會導致溢出,132 * 5 = 460				value2 = maxNum.at(j) - '0';				digitValue = value1 * value2 + pass;				//需要進位				if(digitValue >= 10)				{					pass = digitValue / 10;					digitValue = digitValue % 10;				}				else				{					pass = 0;				}				stream << digitValue;//記錄當前位			}			//易錯,需要判斷最后一次的進位是否存在,如果存在,需要繼續處理			if(pass != 0)			{				stream << pass;			}			//得到的結果需要逆置			result = stream.str();			reverse(result.begin() , result.end());			//逆置完了之后,需要追加0			for(int k = 0 ; k < minLen - 1 - i; k++)			{				result += "0";			}			results.push_back(result);		}		if(results.empty())		{			return "";		}		//將得到的結果累加求和,需要計算最長的長度		int size = results.size();		pass = 0;		digitValue = 0;		maxLen = results.at( size - 1 ).length();		digitValue = 0;		stringstream resultStream;		int len;		int index;		for(int i = 0 ; i < maxLen ; i++)		{				//對每一個數的每一位進行求和,必須從最后一位進行求和			digitValue = 0;			for(int j = 0 ; j < size ; j++)			{				len = results.at(j).length();				index = len - 1 - i;				//說明當前結果已經變成0了,直接跳過				if(index < 0)				{					continue;				}				digitValue += ( results.at(j).at(index) - '0' );			}			digitValue += pass;			//判斷是否需要進位			if(digitValue >= 10)			{				pass = digitValue / 10;				digitValue = digitValue % 10;			}			else			{				pass = 0;			}			resultStream << digitValue;		}		if(pass != 0)		{			resultStream << pass;		}		result = resultStream.str();		reverse(result.begin() , result.end());		return result;    }};*/
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产丝袜精品第一页| 欧美丝袜第一区| 亚洲iv一区二区三区| 久久全国免费视频| 热久久免费国产视频| 九九久久精品一区| 国产精品丝袜白浆摸在线| 日本一区二区三区在线播放| 91精品国产自产91精品| 两个人的视频www国产精品| 狠狠躁18三区二区一区| 久久在线免费视频| 国产性猛交xxxx免费看久久| 国产成人精品av| 色噜噜狠狠狠综合曰曰曰| 国产乱肥老妇国产一区二| 少妇高潮久久77777| 国产丝袜一区二区三区| 81精品国产乱码久久久久久| 不卡在线观看电视剧完整版| 国产精彩精品视频| 日本最新高清不卡中文字幕| 亚洲最新在线视频| 亚洲第一在线视频| 亚洲韩国青草视频| 国产在线精品播放| 91国内产香蕉| 久久精品视频在线播放| 68精品久久久久久欧美| 亚洲www在线观看| 色www亚洲国产张柏芝| 91精品国产亚洲| 亚洲国产天堂久久综合| 激情成人在线视频| 成人在线精品视频| 中文字幕日韩综合av| 国产精品入口福利| 欧美亚洲免费电影| 一本久久综合亚洲鲁鲁| 久久精品视频在线观看| 亚洲精品98久久久久久中文字幕| 国产精品美女视频网站| 精品久久久久久久久久ntr影视| 欧美大胆a视频| 欧洲成人性视频| 亚洲国产成人在线播放| 宅男66日本亚洲欧美视频| 亚洲2020天天堂在线观看| 一区二区三区动漫| 亚洲第一视频网站| 一区二区成人精品| 欧美视频在线观看免费| 韩国精品久久久999| 亚洲男女自偷自拍图片另类| 欧美亚洲伦理www| 大荫蒂欧美视频另类xxxx| 精品久久久久久久久久久久久| 欧美一级免费看| 国产精品视频一区国模私拍| 国产亚洲欧洲黄色| 欧美大奶子在线| 蜜臀久久99精品久久久无需会员| 国产精品免费一区二区三区都可以| 日韩电影在线观看免费| 亚洲男人天堂九九视频| 57pao国产精品一区| 亚洲免费小视频| 亚洲电影免费观看高清完整版| 欧美野外猛男的大粗鳮| 91精品久久久久久久久久| 91精品国产综合久久久久久久久| 国产98色在线| 亚洲国产精品成人精品| 国产精品久久久久久久久粉嫩av| 2025国产精品视频| 国产精品极品美女粉嫩高清在线| 久久中文久久字幕| 亚洲国产精品电影在线观看| 亚洲另类激情图| 午夜精品久久久久久久久久久久久| 国产专区精品视频| 欧美成人免费小视频| 欧美成人精品激情在线观看| 欧美日韩国产一区二区| 国产精品视频色| 91po在线观看91精品国产性色| 一区二区三区www| 国产精品入口日韩视频大尺度| 精品欧美一区二区三区| 国产精品欧美风情| 一二美女精品欧洲| 欧美日本在线视频中文字字幕| 久久99视频免费| 91精品国产综合久久久久久久久| 亚洲欧美日韩精品久久奇米色影视| 久久91超碰青草是什么| 日韩欧美精品网址| 国产日韩欧美影视| 亚洲天天在线日亚洲洲精| 国产一区二区三区视频| 国产视频丨精品|在线观看| 日韩精品亚洲精品| 成人美女av在线直播| 性欧美xxxx交| 成人久久一区二区三区| 国产一区二区色| 国产91色在线|免| 国产精品老女人视频| 另类天堂视频在线观看| 亚洲精品日韩激情在线电影| 精品国内亚洲在观看18黄| 久久久久久久久网站| 欧美噜噜久久久xxx| 欧美性视频在线| 国产精品福利片| 欧美一区二粉嫩精品国产一线天| 欧美极品第一页| 国产成人精品日本亚洲专区61| 久久男人的天堂| 国产成人综合亚洲| 57pao国产成人免费| 精品久久久久久久中文字幕| 日韩欧美成人免费视频| 人妖精品videosex性欧美| 国产精品91久久| 亚洲一区二区三区四区视频| 伊人亚洲福利一区二区三区| 国产91色在线|免| 亚洲男人第一网站| 97色在线视频| 国产精品视频专区| 992tv成人免费影院| 欧美日韩一二三四五区| 日韩美女免费观看| 国产精品www色诱视频| 欧美性jizz18性欧美| 亚洲色无码播放| 久久青草精品视频免费观看| 亚洲精品999| 欧美日韩中国免费专区在线看| 国产精品高潮呻吟视频| 日韩av在线网| 奇米成人av国产一区二区三区| 精品久久久久久久久久ntr影视| 久久久国产精彩视频美女艺术照福利| 国内精品久久久久久中文字幕| 国产+成+人+亚洲欧洲| 欧美极品少妇xxxxⅹ裸体艺术| 91精品综合视频| 美女av一区二区三区| 欧美在线观看www| 国产精品扒开腿做爽爽爽男男| 国产精品成人免费视频| 日韩欧美中文免费| 欧美激情精品久久久久久蜜臀| 国产日韩欧美中文在线播放| 色爱精品视频一区| 国产亚洲精品美女久久久久| 欧美大片免费观看| 日韩二区三区在线| 日韩欧美中文第一页| 性欧美在线看片a免费观看| 精品国产乱码久久久久久虫虫漫画| 亚洲成年人在线|