计蒜客习题:A*B问题(大整数类)


问题描述

计算两个非负整数A,B的乘积。不过A,B可能会很大。
输入格式
第一行输入一个非负整数A。
第二行输入一个非负整数B。
A,B的长度不大于 500。
输出格式
输出A*B的值。不要有多余的前导零。
样例输入
4321
1234
样例输出
5332114


AC代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{   int m=0;
    int n=0;
    int u=0;
    int a[600];
    int b[600];
    int ans[1200];
    int buf;
    int INF=1199;
    memset(b,0,sizeof(b));
    memset(a,0,sizeof(a));
    memset(ans,0,sizeof(ans));
    for(;;)
    {
        char q;
        scanf("%c",&q);
        if(q==10)break;
        a[m]=(int)q-'0';
        m++;
    }
    for(;;)
    {
        char q;
        scanf("%c",&q);
        if(q==10)break;
        b[n]=(int)q-'0';
        n++;
    }
    int x=0;
    for(int i=m-1;i>=0;i--)
    {
        for(int j=n-1;j>=0;j--)
        {   
            ans[INF-x-(n-1-j)]+=a[i]*b[j];
        //  cout<<a[i]<<"     "<<b[j];
        }
    x++;    
    }
    for(int j=INF;j>0;j--)
    {
        ans[j-1]+=ans[j]/10;
        ans[j]=ans[j]%10;
    }

    for(int j=0;j<=INF;j++)
    {if((u==0)&&(ans[j]==0))continue;
    if((u==0)&&(ans[j]!=0))u=1;
    cout<<ans[j];
    }
    if(u==0)cout<<"0";
return 0;

}
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页