日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串相乘(大数相乘)

發布時間:2024/4/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串相乘(大数相乘) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、思路(字符串模擬) O(n*m)

一、普通豎式

以num1 = 123 , num2 = 456為例:我們遍歷 num2 每一位與 num1 進行相乘,將每一步的結果進行累加,在這個過程如果相乘或者相加的結果大于等于10 ,我們都要去滿10進位,如下圖所示:

這樣模擬普通豎式計算的方法較為復雜,我們可以考慮優化版的豎式計算。

二、優化豎式

其實在相乘或者相加計算過程的每一位,我們可以考慮先不去滿10進位,等到計算完所有的相乘結果以后,最終將其加到一塊,再去滿10進位 ,最后的結果和普通豎式 一樣,但卻可以大大簡化我們的模擬過程。(如下圖所示)

class Solution { public:string multiply(string num1, string num2) {vector<int> A,B;int n=num1.size();int m=num2.size();vector<int> C(n+m);for(int ii=n-1;ii>=0;ii--) A.push_back(num1[ii]-'0');//-'0'把字符變成數字for(int ii=m-1;ii>=0;ii--) B.push_back(num2[ii]-'0');for(int ii=0;ii<A.size();ii++){for(int jj=0;jj<B.size();jj++){C[ii+jj]+=A[ii]*B[jj];}}int t=0;//存儲進位for(int ii=0;ii<C.size();ii++){t+=C[ii];//為了利用上上面那個進位C[ii]=t%10;//進位操作的固定寫法,先t%10取個位,然后再t/10進位t/=10;}int kk=C.size()-1;while(kk>0&&!C[kk]) kk--;//去除前導0 比如此例 "2" "3"->"06"string res;for(;kk>=0;kk--){res+=C[kk]+'0';//+'0'把數字變成字符}return res;} };

總結

以上是生活随笔為你收集整理的字符串相乘(大数相乘)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。