zoukankan      html  css  js  c++  java
  • 【HIHOCODER 1420】 Bigint Multiplication

    描述


    Given 2 nonnegative integers a and b, calculate a × b.

    输入


    One line with 2 integers a and b separated by a single space.
    0 ≤ a, b ≤ 10100.

    输出


    The value of a × b.

    样例输入

    100000000000000000000 100000000000000000000
    

    样例输出

    10000000000000000000000000000000000000000
    

    注意很多0时只要输出一个

    #include <bits/stdc++.h>
    #define ll long long
    #define inf 1000000000
    #define PI acos(-1)
    #define bug puts("here")
    #define REP(i,x,n) for(int i=x;i<=n;i++)
    #define DEP(i,n,x) for(int i=n;i>=x;i--)
    #define mem(a,x) memset(a,x,sizeof(a))
    using namespace std;
    inline int read(){
        int x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int N=205;
    class BigNumber{
        public:
        char a[N];
        int tot;
        BigNumber(char t[]){
             tot=0;
             DEP(i,strlen(t)-1,0) a[tot++]=t[i];
        }
        BigNumber(){tot=0;}
    };
    BigNumber Add (BigNumber an,BigNumber bn){
         int mn=max(bn.tot,an.tot),sum,add=0;
         BigNumber tmp;
         REP(i,0,mn-1){
             sum=0;
             if(i<bn.tot) sum+=bn.a[i]-'0';
             if(i<an.tot) sum+=an.a[i]-'0';
             sum+=add;
             add=sum/10;sum%=10;
             tmp.a[i]=sum+'0';
         }
         tmp.tot=mn;
         if(add!=0) tmp.a[tmp.tot++]=add+'0';
         return tmp;
    }
    BigNumber s1 (int s,BigNumber bn){
          int sum,add=0;
          BigNumber tmp;
          REP(i,0,bn.tot-1){
              sum=s*(bn.a[i]-'0')+add;
              add=sum/10;sum%=10;
              tmp.a[i]=sum+'0';
          }
          tmp.tot=bn.tot;
          if(add!=0) tmp.a[tmp.tot++]=add+'0';
          return tmp;
    }
    BigNumber multi (BigNumber an,BigNumber bn){
          BigNumber c1,t;
          int sum,add;
          REP(i,0,an.tot-1){
              t=s1(an.a[i]-'0',bn);
              if(i!=an.tot-1){
                 DEP(j,bn.tot-1,0) bn.a[j+1]=bn.a[j];
                 bn.a[0]='0';
                 bn.tot++;
              }
              c1=Add(c1,t);
          }
          return c1;
    }
    char t1[N],t2[N];
    int main(){
       // while(1)
        {
            cin>>t1>>t2;
            BigNumber ans=multi(BigNumber(t1),BigNumber(t2));
            bool flag=false;
            REP(i,0,ans.tot-1) if(ans.a[i]!='0') {flag=true;break;}
            if(!flag) {puts("0");return 0;}
            DEP(i,ans.tot-1,0) printf("%c",ans.a[i]);
            puts("");
        }
        return 0;
    }
    
  • 相关阅读:
    团体程序设计天梯赛PTA L1-006连续因子
    团体程序设计天梯赛PTA L1-002打印沙漏
    spring学习3-配置文件
    markdown基本用法
    java贪食蛇小游戏
    在idea中使用lombook插件
    ajax初体验hello_ajax
    idea,自定义骨架的增加与删除
    idea 2017,2018,2019下载与破解
    idea关联mysql数据库失败,时区错误,数据库驱动配置
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/7903580.html
Copyright © 2011-2022 走看看