C++實現(xiàn)大數(shù)相乘的算法
由于數(shù)字無法用一個整形變量存儲,很自然的想到用字符串來表示一串?dāng)?shù)字。然后按照乘法的運算規(guī)則,用一個乘數(shù)的每一位乘以另一個乘數(shù),然后將所有中間結(jié)果按正確位置相加得到最終結(jié)果。可以分析得出如果乘數(shù)為A和B,A的位數(shù)為m,B的位數(shù)為n,則乘積結(jié)果為m+n-1位(最高位無進(jìn)位)或m+n位(最高位有進(jìn)位)。因此可以分配一個m+n的輔存來存儲最終結(jié)果。為了節(jié)約空間,所有的中間結(jié)果直接在m+n的輔存上進(jìn)行累加。
C++實現(xiàn)大數(shù)相乘代碼如下:
#include<iostream> #include<string> using namespace std; string BigNumMultiply(string str1,string str2) { int size1=str1.size(),size2=str2.size(); string str(size1+size2,'0'); for(int i=size2-1;i>=0;--i) { int mulflag=0,addflag=0; for(int j=size1-1;j>=0;--j) { int temp1=(str2[i]-'0')*(str1[j]-'0')+mulflag; mulflag=temp1/10; temp1=temp1%10; int temp2=str[i+j+1]-'0'+temp1+addflag; str[i+j+1]=temp2%10+48; addflag=temp2/10; } str[i]+=mulflag+addflag; } if(str[0]=='0') str=str.substr(1,str.size()); return str; } int main() { string str1,str2; while(cin>>str1>>str2) { cout<<str1<<"*"<<str2<<"="<<endl; cout<<BigNumMultiply(str1,str2)<<endl; } return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++在C語言基礎(chǔ)之上增強(qiáng)的幾個實用特性總結(jié)
這篇文章主要介紹了C++在C語言基礎(chǔ)之上增強(qiáng)的幾個實用特性總結(jié),包括C++中更強(qiáng)的類型約束以及結(jié)構(gòu)體方面等一些更加高級的特性,需要的朋友可以參考下2016-03-03C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03基于atoi()與itoa()函數(shù)的內(nèi)部實現(xiàn)方法詳解
本篇文章是對atoi()與itoa()函數(shù)的內(nèi)部實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言數(shù)組入門之?dāng)?shù)組的聲明與二維數(shù)組的模擬
這篇文章主要介紹了C語言數(shù)組入門之?dāng)?shù)組的聲明與二維數(shù)組的模擬,數(shù)組學(xué)習(xí)的同時也要相應(yīng)理解C語言指針的作用,需要的朋友可以參考下2015-12-12