HLG1159 MAGI System【大整数乘法】
Description |
《Neon Genesis Evangelion》(中文译名:新世纪福音战士,简称EVA)。《EVA》是表面上是一部机器人动画,但是在剧情的展开手法,内容的深度上,使得一经播出就在日本引发“社会现象”程度的回应。其中涉及大量宗家和哲学的内容,复杂的人物精神分析。让《EVA》超出简单动画作品的高度。成为日本动画史上无法超越的动画之一。 |
Input |
存在多组数据。每行有两个非负整数n,m,以空格隔开,n和m的位数不会超过1000。 |
Output |
给出每一组数据的乘积值,每一组结果为一行。 |
Sample Input |
123 321 |
Sample Output |
39483 |
code:
View Code
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,l,m1,m2,c,flag;
int s1[1002],s2[1002],s3[2004]; //s1[],s2[]表示2乘数,s3[]表示结果
char line1[1002],line2[1002]; //用字符串保存数字
while(scanf("%s%s",line1,line2)!=EOF)
{
for(i=l=strlen(line1)-1;i>=0;i--)
s1[i]=line1[l-i]-'0';
for(i=l=strlen(line2)-1;i>=0;i--)
s2[i]=line2[l-i]-'0'; //将字符数组长的整数数组,注意要反过来
j=strlen(line1)+strlen(line2); //乘积的长度是两个乘数长度的和
for(i=0;i<2001;i++)
s3[i]=0; //结果初始化,为乘法做准备
m1=strlen(line1);
m2=strlen(line2);
for(i=0;i<m1;i++)
for(k=0;k<m2;k++)
s3[i+k]+=s1[i]*s2[k]; //逐位相乘,结果加到对应位
for(i=0,c=0;i<2001;i++)
{
k=s3[i]+c;
s3[i]=k%10;
c=k/10; //处理进位
}
flag=0;
for(i=2000;i>=0;i--)
{
if(flag||s3[i])
{
printf("%d",s3[i]);
flag=1;
}
}
if(!flag)
printf("0");
putchar('\n');
}
return 0;
}