链接:http://poj.org/problem?id=2389
模板题,不多说。
现以 835×49为例来说明程序的计算过程。
先算835×9。5×9得到45个1,3×9得到27个10,8×9得到72个100。由于不急于处理进位,所以835×9算完后,aResult如下:
乘法过程完毕。接下来从 aResult[0]开始向高位逐位处理进位问题。aResult[0]留下5,把4加到aResult[1]上,aResult[1]变为51后,应留下1,把5加到aResult[2]上……最终使得aResult里的每个元素都是1位数,结果就算出来了:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,nb,na,d;
int alen,blen,numa[50],numb[50];
int a[50],b[50],res[100];
char line1[50],line2[50],result[100];
while(scanf("%s%s",line1,line2)>0)
{
alen=strlen(line1);
blen=strlen(line2);
memset(res,0,sizeof(res));
for(i=alen-1,na=0;i>=0;i--)
numa[na++]=line1[i]-'0';
for(i=blen-1,nb=0;i>=0;i--)
numb[nb++]=line2[i]-'0';
for(i=0;i<na;i++)
for(j=0;j<nb;j++)
res[i+j]+=(numa[i]*numb[j]);
na=na+nb+10;
for(i=0,d=0;i<=na;i++)
{
if(res[i]>=10)
res[i+1]+=(res[i]/10);
res[i]%=10;
if(res[i]!=0)
d=i; //记录输出的开始位置,即最高位数
}
for(i=d;i>=0;i--)
printf("%d",res[i]);
printf("\n");
}
return 0;
}