这个算法有个技巧:将字符串先转化为数组,乘法公式为c[i+j] += b[i]*a[j],最后在统一处理进位,这一步很精髓
#include<stdio.h>
#include<string.h>
#define MAX 200
void Muti(char str1[],char str2[])
{
int len1,len2,i,j;
int a[MAX+10],b[MAX+10],c[2*MAX+20];
memset(a,0,sizeof(a)); //数组初始化
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
len1 = strlen(str1);
for(j=0,i=len1-1;i>=0;i--)
{
a[j++] = str1[i] - '0' ;
}
len2 = strlen(str2);
for(j=0,i=len2-1;i>=0;i--)
{
b[j++] = str2[i] - '0';
}
for(i=0;i<len2;i++)
{
for(j=0;j<len1;j++)
{
c[i+j] += b[i]*a[j];
}
}
for(i=0;i<MAX*2;i++) //循环统一处理进位问题
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
for(i=2*MAX;(c[i]==0)&&(i>=0);i--);//跳过最高位的0
if(i>=0)
for(;i>=0;i--)
printf("%d",c[i]);
else
printf("0");
printf("\n");
}
int main()
{
char str1[MAX],str2[MAX];
gets(str1);
gets(str2);
Muti(str1,str2);
}