#include <iostream>
#include <string.h>
#include <assert.h>
using namespace std;
const char *Multi(const char *str1, const char *str2);
int main()
{
char str1[]="12345";
char str2[]="34567";
const char *p=Multi(str1,str2);
cout<<str1<<" * "<<str2<<" = "<<endl<<p<<" "<<endl<<"直接乘:"<<atoi(str1)*atoi(str2)<<endl;
delete []p;
char str3[]="789789456456456789123123789";
char str4[]="96345678912345678945612345678912321";
const char *p1=Multi(str3,str4);
cout<<str3<<" * "<<str4<<" = "<<endl<<p1<<" "<<endl<<"直接乘:"<<atoi(str3)*atoi(str4)<<endl;
delete []p1;
char str5[256];
char str6[256];
int a=23456;
int b=65432;
const char *p2=Multi(itoa(a,str5,10),itoa(b,str6,10));
cout<<str5<<" * "<<str6<<" = "<<endl<<p2<<" "<<endl<<"直接乘:"<<atoi(str5)*atoi(str6)<<endl;
delete []p2;
return 0;
}
const char *Multi(const char *str1, const char *str2)
{
assert(NULL!=str1 && NULL !=str2);
int m=strlen(str1);
int n=strlen(str2);
int *cpm=new int[m+n];
memset(cpm,0,sizeof(int)*(m+n));
int i,j;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
cpm[i+j+1]+=((str1[i]-'0')*(str2[j]-'0'));
}
}
for (i=m+n-1; i>0; i--)
{
if (cpm[i]>=10)
{
cpm[i-1]+=cpm[i]/10;
cpm[i] %= 10;
}
}
i=0;
while (cpm[i]==0)
{
i++;
}
char *p=new char[m+n-i+1];
j=0;
while (i<m+n)
{
p[j++]=cpm[i++]+'0';
}
p[j]='\0';
delete []cpm;
return p;
}
参考:
http://www.cnblogs.com/hicjiajia/archive/2010/09/26/1836337.html