典型的 大数乘法
说明参考:程序设计在线指导
以835X49为例:
重点:第i位与第j位相乘得到的数一定会累加到第i+j位上
#include <stdio.h>
#include <string.h>
#define MAX_LEN 200
unsigned an1[MAX_LEN + 10];
unsigned an2[MAX_LEN + 10];
unsigned Rut[MAX_LEN*2+10];
char sLine1[MAX_LEN + 10];
char sLine2[MAX_LEN + 10];
int main()
{
freopen("in.txt","r",stdin);
gets(sLine1);
gets(sLine2);
int i ,j;
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(Rut,0,sizeof(Rut));
int len1 = strlen(sLine1);
j = 0;
for(i=len1-1;i>=0;i--)
an1[j++] = sLine1[i] - '0';
int len2 = strlen(sLine2);
j=0;
for(i=len2-1;i>=0;i--)
an2[j++] = sLine2[i] - '0';
for(i=0;i<len2;i++)
{
for(j=0;j<len1;j++)
Rut[i+j] += an2[i]*an1[j];
}
for(i=0;i<MAX_LEN*2;i++)
{
if(Rut[i]>=10)
{
Rut[i+1]+=Rut[i]/10;
Rut[i]=Rut[i]%10;
}
}
bool output = false;
for(i=MAX_LEN*2;i>=0;i--)
{
if(output)
printf("%d",Rut[i]);
else if(Rut[i])
{
printf("%d",Rut[i]);
output = true ;
}
}
if(!output)
printf("0");
return 0;
}