输入两个大数,输出两个数的乘积,位数可能很大,少于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;
}
posted on 2011-04-24 18:06  pcoda  阅读(215)  评论(0编辑  收藏  举报