33. 高精度练习之乘法


时间限制: 1 s

 空间限制: 128000 KB

 题目等级 : 黄金 Gold

题解

 查看运行结果

题目描述 Description

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

输入描述 Input Description

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

输出描述 Output Description

输出A*B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

36

数据范围及提示 Data Size & Hint

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

代码:

#include

using namespace std;

#include

#include

int main()

{

 

       string a,b;

       cin>>a>>b;

       int q[504]={0},w[501]={0},c[1002]={0};

       int lenq=a.length();

       int lenw=b.length();

       for(int i=1;i<=lenq;++i)

       q[i]=a[lenq-i]-48;

       for(int i=1;i<=lenw;++i)

       w[i]=b[lenw-i]-48;

       for(int i=1;i<=lenq;++i)

         {

             int x=0;

             for(int j=1;j<=lenw;++j)

             {

                    c[i+j-1]+=q[i]*w[j]+x;

                    x=c[i+j-1]/10;

                    c[i+j-1]%=10;

                }

                c[i+lenw]+=x;

         }

       int lenc=lenq+lenw;

       while(c[lenc]==0&&lenc>1)

       lenc--;

       for(int i=lenc;i>=1;--i)

       printf("%d",c[i]);

       return 0;

}

posted @ 2016-03-01 21:47  csgc0131123  阅读(160)  评论(0编辑  收藏  举报