两个大整数相乘

来源:互联网 发布:搜索排名优化哪家好 编辑:程序博客网 时间:2024/04/27 23:40

问题描述

求两个不超过200位的非负整数的积。输入数据有两行,每行是一个不超过200位的非负整数,没有多余的前导0。输出要求一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342

输入样例

    12345678900

    98765432100

输出样例

   1219326311126352690000

 

这两个大整数相乘,先不着急处理进位,到后面统一处理。

 

下面是我的代码:

 

#include<iostream>
#include<cstring>
using namespace std;

const int MAXN=200+5;
char str1[MAXN];
char str2[MAXN];
int str3[MAXN];
int str4[MAXN];
int str5[MAXN*2];

int main(void)
{
    memset(str1,0,sizeof(str1));
    memset(str2,0,sizeof(str2));
    memset(str3,0,sizeof(str3));
    memset(str4,0,sizeof(str4));
    memset(str5,0,sizeof(str5));
    cin>>str1>>str2;
    int len1=strlen(str1);
    int i;
    int j=0;
    for(i=len1-1; i>=0; i--)
    {
        str3[j++]=str1[i]-'0';
    }
    int len2;
    len2=strlen(str2);
    j=0;
    for(i=len2-1; i>=0; i--)
    {
        str4[j++]=str2[i]-'0';
    }
    for(i=0; i<len2; i++)
    {
        for(int j=0; j<len1; j++)
        {
            str5[i+j]+=str4[i]*str3[j];
        }
    }
    for(i=0; i<MAXN*2; i++)
    {
        if(str5[i]>=10)
        {
            str5[i+1]+=str5[i]/10;
            str5[i]%=10;
        }
    }
    for(i=2*MAXN-1; i>=0&&str5[i]==0; i--);
    if(i>=0)
    {
        for(; i>=0; i--)
        {
            cout<<str5[i];
        }
        cout<<endl;
    }
    return 0;
}

 

原创粉丝点击