【洛谷P1303 A*B Problem】

题目描述

求两数的积。

输入输出格式

输入格式:

 

两行,两个数。

 

输出格式:

 

 

输入输出样例

输入样例#1: 
1 
2
输出样例#1: 
2

说明

每个数字不超过10^2000,需用高精

emm,显然本题需要用高精:高精,顾名思义,高精度运算,简洁来说就是很大的数字进行运算。

乘法中也运用了一些思想;比如说对于进位的处理(我用的是x)

先看看代码吧

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
int main()
{
    char a1[2001],b1[2001];
    int a[2001]={},b[2001]={},c[200001]={},lena,lenb,lenc,i,j,x;
    scanf("%s",a1);
    scanf("%s",b1);
    lena=strlen(a1);lenb=strlen(b1);
    for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;
    for(i=0;i<=lenb-1;++i) b[lenb-i]=b1[i]-48;
    for(i=1;i<=lena;++i)
    {
        x=0;
        for(j=1;j<=lenb;j++)
        {
            c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+lenb]=x;
    }
    lenc=lena+lenb;
    while(c[lenc]==0&&lenc>1)
       lenc--;
    for(i=lenc;i>=1;i--)
       cout<<c[i];
    cout<<endl;
    return 0;
}

 

这就是比较传统的思想,对于进位的处理相对来说较容易理解(但代码有些麻烦)

通过熟练后也可以根据自己的码风来进行修改

posted @ 2019-03-03 10:51  卍GC卐  阅读(149)  评论(0编辑  收藏  举报