大数相乘法
题目:输入两个数,输出两个数相乘的结果
输入样例:
12345678900
98765432100
输出样例:
1219326311126352690000
#include <iostream> #include <math.h> #include <algorithm> #include <string.h> using namespace std; int n,m,k,ans; int dp[51][51][51][51],g[1000]; bool vis[105]; char ss[105]; string s; string BigMult(string a,string b){ //a 被乘数 b乘数 int al=a.length(); //相乘时,被乘数从低位到高位逐步相乘乘数的低到高位 相乘的每一位都保存到数组 int bl=b.length(); int cl=0; for(int i=al-1;i>=0;i--){ //被乘数的低到高位 for(int j=bl-1;j>=0;j--){ //乘数的低到高位 g[cl]+=(a[i]-'0')*(b[j]-'0'); //位累加 cl++; //每操作一次长度加一 } if(i!=0) //没有到最后一位的话,下一次累加位是从上一次长度cl+1-被乘数长度开始 cl-=(bl-1); } for(int i=0;i<cl;i++){ //对相加结果的数组进行进位 if(g[i]>10){ long t=g[i]; g[i]=t%10; g[i+1]+=t/10; if(i==cl-1){ //数的最高位发生了进位,则长度加一 cl++; } } } string str=""; //将结果转为字符串并返回 for(int i=cl-1;i>=0;i--){ str+=(g[i]+'0'); } return str; } int main() { string a,b; cin>>a>>b; cout<<BigMult(a,b); }