【CODEVS3117】高精度练习之乘法

Description

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

Input

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

Output

输出A*B的值

Sample Input

3 12

Sample Output

36

Hint

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

 

#include<iostream>
#include<cstring>
using namespace std;
char A[510],B[510];
int a[510],b[510],c[1020];
int main()
{
    cin>>A>>B;
    int aLen=strlen(A), bLen=strlen(B);
    for (int i=1;i<=aLen;i++) a[i]=A[aLen-i]-'0';
    for (int i=1;i<=bLen;i++) b[i]=B[bLen-i]-'0';
    int x;
    for (int i=1;i<=aLen;i++)
    {
        x=0;//处理进位 
        for (int j=1;j<=bLen;j++)
        {
            c[i+j-1]=c[i+j-1]+x+a[i]*b[j];
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[bLen+i]=x;
    }
    int cLen=aLen+bLen;
    while (!c[cLen] && cLen>1) cLen--;
    for (int i=cLen;i>=1;i--) cout<<c[i];
}

 

posted @ 2016-02-16 10:50  mengyue  阅读(140)  评论(0编辑  收藏  举报