POJ2980大整数乘法

描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900 98765432100
样例输出

1219326311126352690000

代码:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(){
char a[201];
	char b[201];
	int aa[201];
	int bb[201];
	int mul[410];
	memset(aa,0,sizeof(aa));
	memset(bb,0,sizeof(bb));
	memset(mul,0,sizeof(mul));
	gets(a);
	gets(b);
	int i,j;
	int l1=strlen(a);
	int l2=strlen(b);
	j=0;
	for(i=l1-1;i>=0;i--)
		aa[j++]=a[i]-'0';
	j=0;
	for(i=l2-1;i>=0;i--)
		bb[j++]=b[i]-'0';
	for(i=0;i<l1;i++)
		for(j=0;j<l2;j++)
			mul[i+j]+=aa[i]*bb[j];
	for(i=0;i<410;i++)
		if(mul[i]>=10){int re=mul[i]/10;mul[i]%=10;mul[i+1]+=re;}
	bool f=false;
	for(i=409;i>=0;i--)
		{if(mul[i]!=0)f=true;
	     if(f) printf("%d",mul[i]);}
	if(!f)printf("0");
	return 0;}
注意0*0的结果也是0 。

你可能感兴趣的:(POJ2980大整数乘法)