HLG1159 MAGI System【大整数乘法】

Description

    《Neon Genesis Evangelion》(中文译名:新世纪福音战士,简称EVA)。《EVA》是表面上是一部机器人动画,但是在剧情的展开手法,内容的深度上,使得一经播出就在日本引发“社会现象”程度的回应。其中涉及大量宗家和哲学的内容,复杂的人物精神分析。让《EVA》超出简单动画作品的高度。成为日本动画史上无法超越的动画之一。
    “MAGI System”出自《EVA》,是作品中Nerv组织所使用的大型中央电脑系统。MAGI一词源于圣经,似乎意为东方三贤人,由东方而来朝拜耶稣的三人。该系统由三台分别以东方三贤人命名的独立电脑MELCHIOR 1、BALTHASAR 2、CASPER 3组成,3个独立电脑会独自仲裁事件,最终采用多数通过制决定。Nerv的组织的数据计算和事件决策都是通过MAGI system来负责计算和仲裁的。
    在大型数据计算时,经常涉及高精度运算,比如巨大整数的计算或者高精度的浮点计算。大整数的计算可以通过模拟普通计算的方法来实现。例如:
  123
*  45
-----
  615
 492
-----
 5535
   这里我们用模拟法来实现大整数的乘法运算。

Input

存在多组数据。每行有两个非负整数n,m,以空格隔开,n和m的位数不会超过1000。

Output

给出每一组数据的乘积值,每一组结果为一行。

Sample Input

123 321
123456789 987654321
1 0

Sample Output

39483
121932631112635269
0

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;
}


posted @ 2012-03-16 07:25  'wind  阅读(309)  评论(0编辑  收藏  举报