CSP-S/J 信息学1307:高精度乘法-信息学一本通(c++)

♀尐吖头ヾ 提交于 2020-02-08 13:03:45

CSP-SJ信息学资料下载
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 19379 通过数: 6592
【题目描述】
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。

【输入】
输入两个高精度正整数M和N。

【输出】
求这两个高精度数的积。

【输入样例】
36
3
【输出样例】
108
【来源】

No

代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=209;
char x[maxn],y[maxn];
int a[maxn],b[maxn],c[2*maxn];//注意积的位数和乘数位数之间的关系

int main()
{
   cin>>x>>y;

        int len1=strlen(x),len2=strlen(y);
        memset(a,0,sizeof a);
        memset(b,0,sizeof b);
        memset(c,0,sizeof c);
        for(int i=len1-1,j=0; i>=0; i--,j++) a[j]=x[i]-'0';
        for(int i=len2-1,j=0; i>=0; i--,j++) b[j]=y[i]-'0';
        for(int i=0; i<len1; i++)
            for(int j=0; j<len2; j++)//模拟乘法将两个数的每一位均和对方相乘,存入对应的结果中。
                c[i+j]+=a[i]*b[j];//第i号数相当于其后有i个零,第j号数相当于其后有j个零,所以乘出来的结果中有i+j个零,即存入i+j号位置
        int i;
        for(i=0; i<2*maxn; i++)//处理进位问题
        {
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
        while(c[i]==0) i--;
        if(i<0) cout<<"0";
        for(; i>=0; i--)
            cout<<c[i];
        cout<<endl;

    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!