加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

poj2389 普通的大数乘法

发布时间:2021-02-24 06:07:58 所属栏目:大数据 来源:网络整理
导读:= =、每次这种题目说只有40位 然而要开到100位,心里总是一万匹草泥马在奔腾; #include iostream #include stdio.h #include string.h #include stack #include queue #include map #include set #include vector #include math.h #include algorithm using

= =、每次这种题目说只有40位 然而要开到100位,心里总是一万匹草泥马在奔腾;

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
const double pi = acos(-1.0);
#define Len 200005
#define mod 19999997
const int INF = 0x3f3f3f3f;
#define exp 1e-6

int s1[200];
int s2[200];
int tep[200];
int ans[200];

char st1[200];
char st2[200];

void Init()
{
    memset(ans,0,sizeof(ans));
    memset(tep,sizeof(tep));
    memset(s1,sizeof(s1));
    memset(s2,sizeof(s2));
}

int init_st1()
{
    int len,num;
    len=strlen(st1);
    num=0;
    for(int i=len-1;i>=0;i--)
    {
        s1[num++]=st1[i]-'0';       
    }
    return num;
}

int init_st2()
{
    int len,num;
    len=strlen(st2);
    num=0;
    for(int i=len-1;i>=0;i--)
    {
        s2[num++]=st2[i]-'0';
    }
    return num;
}

void add_solve()
{
    int x,f=0;
    int num=0;
    for(int i=0;i<110;i++)
    {
        x=ans[i]+tep[i];
        x+=f;
        f=x/10;
        ans[num++]=x%10;
    }
    if(f)
        ans[num++]+=f;
}

void mul_solve(int num,int len,int n)
{
    int x;
    memset(tep,sizeof(tep));
    int f=0;
    for(int i=0;i<len;i++)
    {
        x=s1[i]*n;
        x+=f;
        f=x/10;
        tep[num++]=x%10;
    }
    if(f)
        tep[num++]+=f;
    add_solve();
}

int main()
{
    scanf("%s%s",st1,st2);

    Init();
    int L1=init_st1();
    int L2=init_st2();

    for(int i=0;i<L2;i++)
    {
        mul_solve(i,L1,s2[i]);
    }

    int k;
    int flag=0;
    for(int i=150;i>=0;i--)
    {
        if(ans[i])
        {
            flag=1;
            k=i;
            break;
        }
    }

    if(!flag)
    {
        printf("0");
        return 0;
    }

    for(int i=k;i>=0;i--)
    {
        printf("%d",ans[i]);    
    }
    return 0;
}

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读