比较大的两个数相乘,采用字符运算,按位相乘,控制好进位就可以了。
相关示例参考:可怕的阶乘
//大数相乘
#include<iostream>
using namespace std;
#define max 100
void CalcNN(char *A,char *B,char *C)
{
if(NULL==A||NULL==B)
{
return;
}
int len_a=strlen(A);
int len_b=strlen(B);
int len_c=0;
if((len_a==1&&A[0]=='0')||(len_b==1&&B[0]=='0'))
{
C[0]='0';
C[1]='\0';
return;
}
int bit[max]={0};
for(int i=len_a-1;i>=0;i--)
{
for(int j=len_b-1;j>=0;j--)
{
bit[(len_a+len_b-2)-(j+i)]+=((A[i]-'0')*(B[j]-'0'));//按位相乘
}
}
for(int i=0;i<max;i++)
{
if(bit[i]>9)
{
for(int k=i;k<max&&bit[k]>9;k++)//计算进位
{
bit[k+1]+=(bit[k]/10);
bit[k]=(bit[k]%10);
}
}
}
int len=max-1;
while(bit[len]==0)
{
len--;
}
for(int i=len;i>=0;i--)
{
C[len_c++]=bit[i]+'0';
}
C[len_c]='\0';
}
int main()
{
char A[max]={0};
char B[max]={0};
char C[max]={0};
while(1)
{
cout<<"乘数:";
gets(A);
cout<<"乘数:";
gets(B);
CalcNN(A,B,C);
cout<<"积 :";
puts(C);
}
system("pause");
return 0;
}
运行结果: