2019-05-172019-05-17
大数相乘基本思想:
相乘相加,只不过大于10先不进位到计算完后统一进位
1 #include <iostream> 2 #include <string> 3 /*project:两个大整数相乘 4 **@author:浅滩 5 **data:2019.05.15 6 */ 7 using namespace std; 8 void multiply(const string &,const string &); 9 int main() 10 { 11 string str1,str2; 12 cin>>str1>>str2; 13 multiply(str1,str2); 14 } 15 16 void multiply(const string &str1,const string &str2) 17 { 18 int *num1=new int [str1.size()]; 19 int *num2=new int [str2.size()]; 20 int result[(str1.size()+str2.size())],result_size=0; 21 fill(result,result+str1.size()+str2.size(),0);//初始化结果数组 22 23 for(int i=0;i<str1.size();i++) 24 num1[i]=str1[i]-'0'; 25 for(int i=0;i<str2.size();i++) 26 num2[i]=str2[i]-'0'; 27 28 for(int i=0;i<str1.size();i++) 29 { 30 for(int j=0;j<str2.size();j++) 31 {(result_size>=i+j? result_size=result_size:result_size=i+j); //找到result的长度-1 32 result[i+j]+=num1[i]*num2[j]; 33 } 34 } 35 36 for(int i=result_size;i>0;i--) 37 { 38 result[i-1]+=result[i]/10; 39 result[i]=result[i]%10; 40 } 41 for(int i=0;i<=result_size;i++) 42 cout<<result[i]; 43 44 }