整数大数相乘
发布时间:2020-12-14 03:06:28 所属栏目:大数据 来源:网络整理
导读:大数相乘要用到大数加法,前边已经写过大数加法,在这儿直接调用。 #includestdio.h#includeiostream#includestring#includealgorithm#includestring.husing namespace std;string add(string st1,string st2){ if(st1.size()st2.size()) //判断哪个长 { str
大数相乘要用到大数加法,前边已经写过大数加法,在这儿直接调用。 #include<stdio.h> #include<iostream> #include<string> #include<algorithm> #include<string.h> using namespace std; string add(string st1,string st2) { if(st1.size()<st2.size()) //判断哪个长 { string stemp=st1; st1=st2; st2=stemp; } reverse(st1.begin(),st1.end()); //将string类st1,st2逆转顺序 reverse(st2.begin(),st2.end()); int len1,len2; len1=st1.length(); //计算各自的长度 len2=st2.length(); int in=0,num; //进位in初始化为0 for(int i=0; i<len2; i++) { num=st1[i]-'0'+st2[i]-'0'+in; //各位的和 in=num/10; num%=10; st1[i]=num+'0'; //放入较长的string里 } for(int j=len2; j<len1; j++) //如果遇到例如123 99892这样的样例,123处理完后需要向前边进位 { num=st1[j]-'0'+in; in=num/10; num%=10; st1[j]=num+'0'; } if(in==1) //相加的结果比原有的string都长 st1+="1"; reverse(st1.begin(),st1.end()); return st1; } string multiplication(string st1,string st2) { if(st1[0]=='0'||st2[0]=='0') return "0"; reverse(st1.begin(),st1.end()); reverse(st2.begin(),len2,len; len1=st1.length(),len2=st2.length(); if(len1<len2) { string stemp=st1; st1=st2; st2=stemp; } len1=st1.size(); len=len2=st2.length(); string stnum; for(int i=0; i<len; i++) { string stemp; for(int k=0; k<i; k++) { stemp+="0"; } int muti,in=0; for(int j=0; j<len1; j++) { muti=(st2[i]-'0')*(st1[j]-'0')+in; in=muti/10; muti=muti%10; stemp+=muti+'0'; } if(in>0) stemp+=in+'0'; reverse(stemp.begin(),stemp.end()); // cout<<stemp<<endl; stnum= add(stnum,stemp); } return stnum; } int main() { // freopen("INput.txt","r",stdin); // freopen("OUT.txt","w",stdout); string s1,s2; while(cin>>s1>>s2) { cout<<multiplication(s1,s2)<<endl; } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |