输入两个很大的数(用字符串表示),输出他们的乘积,假定不考虑非法输入
思路:在两个数相乘时,两个数下标之和相等,相乘之后结果相加,然后在考虑进位情况。
#include <iostream>
#include<string.h>
using namespace std;
char * multiply(const char *a,const char *b)
{
if(a!=NULL&&b!=NULL)
{
int lena=strlen(a);
int lenb=strlen(b);
int *s=new int [lena+lenb];
memset(s,0,lena+lenb);
/*
for(int i=0;i<lena+lenb;i++)
cout<<s[i]<<endl;
*/
//每位相乘
for(int i=0;i<lena;i++)
for(int j=0;j<lenb;j++)
{
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
}
/*
for(int i=0;i<lena+lenb;i++)
cout<<s[i]<<endl;
*/
//进位计算for(int i=lena+lenb-1;i>0;i--)
{
while(s[i]/10!=0)
{
s[i-1]+=s[i]/10;
s[i]=s[i]%10;
}
}
//去掉开头的0元素
int k=0;
while(s[k]==0)
k++;
char * c=new char[lena+lenb];
for(int i=0;k<lena+lenb;i++,k++)
{
c[i]=s[k]+'0';
}
return c;
}
return NULL;
}
int main()
{
char a[100]="123456789";
char b[100]="1111";
cout<<multiply(a,b)<<endl;
return 0;
}
输出结果:
137160492579