• HDU1002 A + B Problem II


      1 /*
      2  HDU1002 A + B Problem II
      3  http://acm.hdu.edu.cn/showproblem.php?pid=1002
      4  高精度加法
      5  *
      6  */
      7 #include <cstring>
      8 #include <cstdio>
      9 #include <algorithm>
     10 using namespace std;
     11 const int Nmax=1000;
     12 struct BigInt
     13 {
     14     int a[Nmax];
     15     int n;
     16     void init() 
     17     {
     18         for(int i=0;i<Nmax;i++)
     19             a[i]=0;
     20     }
     21     BigInt()
     22     {
     23         init();
     24         n=0;
     25     }
     26     BigInt(int _a[],int _n)
     27     {
     28         init();
     29         n=_n;
     30         //for(int i=0;i<Nmax;i++)
     31             //a[i]=0;
     32         for(int i=1;i<=n;i++)
     33             a[i]=_a[i];
     34         maintain();
     35     }
     36     BigInt(char s[])
     37     {
     38         init();
     39         n=strlen(s+1);
     40         for(int i=1;i<=n;i++)
     41             a[i]=s[n-i+1]-'0';
     42         maintain();
     43     }
     44     BigInt(long long  x)
     45     {
     46         init();
     47         n=0;
     48         while(x>0LL)
     49         {
     50             a[++n]=x%10LL;
     51             x/=10LL;
     52         }
     53     }
     54     BigInt(int x)
     55     {
     56         init();
     57         n=0;
     58         while(x>0)
     59         {
     60             a[++n]=x%10;
     61             x/=10;
     62         }
     63     }
     64     void read()
     65     {
     66         init();
     67         n=0;
     68         char c=getchar();
     69         if(c==-1)
     70             return;
     71         while(c==' ' || c=='
    ' )
     72         {
     73             c=getchar();
     74             if(c==-1)
     75                 break;
     76         }
     77         int num[Nmax];
     78         while(c!=' ' && c!='
    ' && c!=-1)
     79         {
     80             num[++n]=c-'0';
     81             c=getchar();
     82         }
     83         for(int i=1;i<=n;i++)
     84             a[i]=num[n-i+1];
     85         maintain();
     86     }
     87     void print()
     88     {
     89         if(n==0)
     90             printf("0");
     91         for(int i=n;i>=1;i--)
     92             printf("%d",a[i]);
     93     }
     94     void maintain()
     95     {
     96         for(int i=1;i<=n;i++)
     97         {
     98             a[i+1]+=a[i]/10;
     99             a[i]%=10;
    100         }
    101         int j=n+1;
    102         while(a[j]!=0)
    103         {
    104             a[j+1]+=a[j]/10;
    105             a[j]%=10;
    106             j++;
    107         }
    108         n=j-1;
    109         while(a[n]==0 && n>1)
    110             n--;
    111     }
    112     friend BigInt operator + (BigInt a,BigInt b)
    113     {
    114         int len=max(a.n,b.n);
    115         BigInt ans;
    116         ans.n=len;
    117         for(int i=1;i<=len;i++)
    118             ans.a[i]=a.a[i]+b.a[i];
    119         ans.maintain();
    120         return ans;
    121     }
    122     //friend BigInt operator - (BigInt a,BigInt b)
    123     //{
    124         //int len=max(a.n,b.n);
    125         //BigInt ans;
    126         //ans.n=len;
    127         //for(int i=1;i<=len;i++)
    128             //ans.a[i]=a.a[i]-b.a[i];
    129         //for(int i=1;i<=len;i++)
    130         //{
    131             //if(ans.a[i]<0)
    132             //{
    133                 //ans.a[i]+=10;
    134                 //a.a[i+1]--;
    135             //}
    136                 //ans.a[i]+=10
    137         //}
    138     //}
    139     friend BigInt operator * (BigInt b,int a)
    140     {
    141         int n=b.n;
    142         BigInt ans;
    143         ans.n=n;
    144         for(int i=1;i<=n;i++)
    145             ans.a[i]=b.a[i]*a;
    146         ans.maintain();
    147         return ans;
    148     }
    149     friend BigInt operator * (int a,BigInt b)
    150     {
    151         int n=b.n;
    152         BigInt ans;
    153         ans.n=n;
    154         for(int i=1;i<=n;i++)
    155             ans.a[i]=b.a[i]*a;
    156         ans.maintain();
    157         return ans;
    158     }
    159     friend BigInt operator * (BigInt a,BigInt b)
    160     {
    161         BigInt ans;
    162         ans.n=a.n+b.n-1;
    163         for(int i=1;i<=a.n;i++)
    164             for(int j=1;j<=b.n;j++)
    165                 ans.a[j+i-1]=a.a[i]*b.a[j];   
    166         ans.maintain();
    167         return ans;
    168     }
    169 };
    170 int main()
    171 {
    172     char s[1002];
    173     char s1[1002];
    174     BigInt a,b;
    175     //freopen("test.in","r",stdin);
    176     int t;
    177     scanf("%d",&t);
    178     for(int ttt=1;ttt<=t;ttt++)
    179     {
    180         printf("Case %d:
    ",ttt);
    181         a.read();
    182         b.read();
    183         a.print();
    184         printf(" + ");
    185         b.print();
    186         printf(" = ");
    187         (a+b).print();
    188         printf("
    ");
    189         if(ttt!=t)
    190             printf("
    ");
    191         //scanf("%lld",&n);
    192         //a.print();
    193     }
    194     return 0;
    195 }
  • 相关阅读:
    智慧养老民政监管平台建设方案
    CF600E Lomsat gelral dsu on tree
    dsu on tree详解
    【Spring 从0开始】Spring5 新功能,整合日志框架 Log4j2
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 数据库事务参数
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 操作数据库
    【Spring 从0开始】AOP 操作
    【Spring 从0开始】AOP 操作中的相关术语、环境准备
  • 原文地址:https://www.cnblogs.com/BBBob/p/6626669.html
Copyright © 2020-2023  润新知