• poj2389 普通的大数乘法


    = =、每次这种题目说只有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,0,sizeof(tep));
        memset(s1,0,sizeof(s1));
        memset(s2,0,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,0,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;
    }
  • 相关阅读:
    [转] When to use what language and why
    C++常用的函数,好的博客文章整理,集锦
    生活2013
    转-什么样的公司才是好公司?好公司的六大特征
    Linux上去掉ps grep自身查询
    Centos 上搭建FTP服务
    IOS上VOIP PUSH Notification功能
    Linux下常用命令集合
    NodeJS React 开发环境搭建
    MongoDB 命令行导入导出JSON文件
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934492.html
Copyright © 2020-2023  润新知