大数相乘

输入两个大数,输出两个数的乘积,位数可能很大,少于1000位

一个数的第i位和另一个数的第j位相乘所得的数,一定是要累加到结果的第i+j位上,这里i,j都是自由往左从0开始数。

#include<stdio.h>

#include<string.h>

#define MAX_LEN 1000

unsigned an1[MAX_LEN+10];

unsigned an2[MAX_LEN+10];

char szLine1[MAX_LEN+10];

char szLine2[MAX_LEN+10];

char aResult[MAX_LEN*2+10];

int main()

{ 

	int i,j;

	while(scanf("%s%s",szLine1,szLine2)!=EOF)

	{

		int nLen1=strlen(szLine1);

		memset(an1,0,sizeof(an1));

		memset(an2,0,sizeof(an2));

		memset(aResult,0,sizeof(aResult));

		j=0;

		for(i=nLen1-1;i>=0;i--)

			an1[j++]=szLine1[i]-48;

		int nLen2=strlen(szLine2);

		j=0;

		for(i=nLen2-1;i>=0;i--)

			an2[j++]=szLine2[i]-48;

		for(i=0;i<nLen2;i++)

		{

			for(j=0;j<nLen1;j++)

				aResult[i+j]+=an2[i]*an1[j];

		}

		for(i=0;i<MAX_LEN*2;i++)

		{

			if(aResult[i]>=10)

			{

				aResult[i+1]+=aResult[i]/10;

				aResult[i]%=10;

			}

		}

		int k=0;

		for(i=MAX_LEN*2;i>=0;i--)

		{

			if(k)

				printf("%d",aResult[i]);

			else if(aResult[i])

			{

				printf("%d",aResult[i]);

				k=1;

			}

		}

		printf("\n");

	}

	return 0;

}

你可能感兴趣的:(大数相乘)