题目1037:Powerful Calculator

    xiaoxiao2021-03-29  47

    #include<iostream> #include<stdlib.h> #include<climits> #include<stdio.h> #include<math.h> #include<algorithm> #include<vector> #include<queue> #include<string> #include<string.h> using namespace std; struct bigi{     int d[1001];     int len;     bigi(){         memset(d,0,sizeof(d));len=0;     }     bigi(string s){         len=s.size();         memset(d,0,sizeof(d));         for(int i=0,j=len-1;i<s.size();j--,i++)             d[i]=s[j]-'0';     } }; bigi add(bigi a,bigi b){     int car=0,sum=0,i,j;     bigi c;     for(i=0,j=0;i<a.len||j<b.len;i++,j++){         sum=a.d[i]+b.d[j]+car;         c.d[c.len++]=sum;         car=sum/10;     }     if(car!=0)         c.d[c.len++]=car;     return c; } bigi mult(bigi a,int n){     int car=0,sum=0,i,j;     bigi c;     for(int i=0;i<a.len;i++){         sum=a.d[i]*n+car;         c.d[c.len++]=sum;         car=sum/10;     }     while(car){         c.d[c.len++]=car;         car/=10;     }     while(c.d[c.len-1]==0)         c.len--;     c.len=max(c.len,1);     return c; } bigi pro(bigi a,bigi b){     bigi sum("0");     for(int i=0;i<b.len;i++){         bigi cur=mult(a,b.d[i]);         for(int j=0;j<i;j++)             cur=mult(cur,10);         sum=add(sum,cur);     }     return sum; } bigi subt(bigi a,bigi b){     int br=0,sum=0,i,j;     bigi c;     for(i=0,j=0;i<a.len;i++,j++){         sum=a.d[i]-b.d[j]-br;         if(sum<0){             c.d[c.len++]=sum+10;             br=1;         }         else{             c.d[c.len++]=sum;             br=0;         }     }     while(c.d[c.len-1]==0)         c.len--;     c.len=max(1,c.len);     return c; } int cmp(bigi h,bigi l){     if(h.len!=l.len)         return h.len-l.len;     for(int i=h.len-1;i>=0;i--)         if(h.d[i]!=l.d[i])             return h.d[i]-l.d[i];     return 0; } int main(){     string op1,op2;     while(cin>>op1>>op2){         bigi a(op1);bigi b(op2);         bigi sum=add(op1,op2);         bigi mlt=pro(op1,op2);         bigi sub;         int neg=0;         if(cmp(a,b)<0){             neg=1;             sub=subt(b,a);         }         else             sub=subt(a,b);         for(int i=sum.len-1;i>=0;i--)             cout<<sum.d[i];         cout<<endl;         if(neg==1)             cout<<"-";         for(int i=sub.len-1;i>=0;i--)             cout<<sub.d[i];         cout<<endl;         for(int i=mlt.len-1;i>=0;i--)             cout<<mlt.d[i];         cout<<endl;     }           return 0; } /**************************************************************     Problem: 1037     User: cust123     Language: C++     Result: Accepted     Time:30 ms     Memory:1524 kb ****************************************************************/

    转载请注明原文地址: https://ju.6miu.com/read-664951.html

    最新回复(0)