3117 高精度练习之乘法

3117 高精度练习之乘法

 

时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
 
 
 
题目描述 Description

给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A*B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

36

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<cstring>
 5 
 6 using namespace std;
 7 const int N=1001;
 8 
 9 char aa[N];
10 char bb[N];
11 int a[N];
12 int b[N];
13 int c[N];
14 
15 int main()
16 {
17     scanf("%s%s",aa,bb);
18     int la=strlen(aa);
19     int lb=strlen(bb);
20     for(int i=0;i<la;i++)
21        a[i+1]=aa[la-i-1]-'0';
22     for(int i=0;i<lb;i++)
23        b[i+1]=bb[lb-i-1]-'0';
24     
25     for(int i=1;i<=la;i++)
26     {
27         int x=0;
28         for(int j=1;j<=lb;j++)
29           {
30               c[i+j-1]+=a[i]*b[j]+x;
31               x=c[i+j-1]/10;
32               c[i+j-1]%=10;
33           }   
34         c[i+lb]=x;  
35     }
36     int j=lb+la;
37     while(!c[j]&&j>1) j--;
38     for(int i=j;i>=1;i--)
39        cout<<c[i];
40 }

 

posted @ 2017-03-21 21:49  ioioioioioio  阅读(184)  评论(0编辑  收藏  举报