zoukankan      html  css  js  c++  java
  • SGU112

    题意:求a^b-b^a次,100以内。大数的-和*的模拟,用的模板,注意该模板中间和结果都不能出现负数。


    #include<iostream>
    #include<string>
    using namespace std;
    const int ten[4]={1,10,100,1000};
    const int maxl=1000;
    struct bignum
    {
       int d[maxl];
       bignum(string s)
       {
           int len=s.size();
           d[0]=(len-1)/4+1;
           int i,j,k;
           for(i=1;i<maxl;i++)d[i]=0;
           for(i=len-1;i>=0;i--)
           {
               j=(len-i-1)/4+1;
               k=(len-i-1)%4;
               d[j]+=ten[k]*(s[i]-'0');
           }
           while(d[0]>1&&d[d[0]]==0)--d[0];
       }
       bignum()
       {
         *this=bignum(string("0"));
       }
       string tostring()
       {
           string s("");
           int i,j,temp;
           for(i=3;i>=1;i--)if(d[d[0]]>=ten[i])break;
           temp=d[d[0]];
           for(j=i;j>=0;j--)
           {
               s=s+(char)(temp/ten[j]+'0');
               temp%=ten[j];
           }
           for(i=d[0]-1;i>0;i--)
           {
               temp=d[i];
               for(j=3;j>=0;--j)
               {
                  s=s+(char)(temp/ten[j]+'0');
                  temp%=ten[j];
               }
           }
           return s;
       }
    }zero("0"),d,temp,mid1[20];
    bool operator < (const bignum &a ,const bignum &b)
    {
        if(a.d[0]!=b.d[0])return a.d[0]<b.d[0];
        int i;
        for(i=a.d[0];i>0;i--)if(a.d[i]!=b.d[i])return a.d[i]<b.d[i];
        return 0;
    }
    bignum operator - (const bignum &a ,const bignum &b)
    {
        bignum c;
        c.d[0]=a.d[0];
        int i,x=0;
        for(i=1;i<=c.d[0];i++)
        {
            x=10000+a.d[i]-b.d[i]+x;
            c.d[i]=x%10000;
            x=x/10000-1;
        }
        while((c.d[0]>1)&&(c.d[c.d[0]]==0))--c.d[0];
        return c;
    }
    bignum operator *(const bignum &a,const bignum &b)
    {
        bignum c;
        c.d[0]=a.d[0]+b.d[0];
        int i,j,x;
        for(i=1;i<=a.d[0];i++)
        {
            x=0;
            for(j=1;j<=b.d[0];j++)
            {
                x=a.d[i]*b.d[j]+x+c.d[i+j-1];
                c.d[i+j-1]=x%10000;
                x/=10000;
            }
            c.d[i+b.d[0]]=x;
        }
        while((c.d[0]>1)&&(c.d[c.d[0]]==0))--c.d[0];
        return c;
    }
    string getstring(int a)
    {
        string ss;
        while(a!=0)
        {
            ss= char('0'+(a%10))+ss;
            a/=10;
        }
        return ss;
    }
    int main()
    {
    
            int aa,bb;
            cin>>aa>>bb;
            if(aa==bb)
            {
                cout<<0<<endl;
                return 0;
            }
            string ta=getstring(aa),tb=getstring(bb);
             bignum a(ta);  bignum b(tb);
         //    cout<<a.tostring();
         //    cout<<b.tostring()<<endl;
         bignum ans1("1"),ans2("1");
    
          for(int i=0;i<bb;i++)
          {
              ans1=ans1*a;
          }
         // cout<<ans1.tostring()<<endl;
           for(int i=0;i<aa;i++)
          {
              ans2=ans2*b;
          }
         // cout<<ans2.tostring()<<endl;
          if(ans2<ans1)
         {
             bignum ans=ans1-ans2;
           cout<<ans.tostring()<<endl;
         }
         else
         {
              bignum ans=ans2-ans1;
             cout<<"-"<<ans.tostring()<<endl;
         }
            return 0;
    }
    


  • 相关阅读:
    NVIC
    ONE WIRE
    对话框
    STM32_USART
    [Java]eclipse的使用
    [转] Android资源管理框架(Asset Manager)简要介绍和学习计划
    [其他]网站收录
    [Java]Java简介
    [网络技术]网关 路由器 OSI
    [安卓]安卓模拟器(Android Emulator)
  • 原文地址:https://www.cnblogs.com/yezekun/p/3925727.html
Copyright © 2011-2022 走看看