1205.cpp

来自「ZOJ 动态规划算法题目入门与提高 源代码」· C++ 代码 · 共 100 行

CPP
100
字号
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    //ifstream cin("in.txt");
    string s1,s2;
    if(s1=="0"&&s2=="0")  cout<<"0\n";
    while(cin>>s1>>s2)
    {    
        bool flag=0; 
        string s="";
        if(s1[0]=='-'&&s2[0]=='-'||s1[0]!='-'&&s2[0]!='-')
        {              
            if(s1[0]=='-') 
            {
                flag=1;
                s1=s1.substr(1,s1.length()-1);
                s2=s2.substr(1,s2.length()-1);
            }
           
            reverse(s1.begin(),s1.end());
            reverse(s2.begin(),s2.end());
            int n1=s1.length();
            int n2=s2.length();
            if(n1<n2) {swap(s1,s2);swap(n1,n2);}
            int t=0;
            for(int i=0;i<n2;i++)
            {
                int sum=0;
                if(s1[i]>='0'&&s1[i]<='9') sum+=(s1[i]-'0');
                else sum+=(s1[i]-'a'+10);
                if(s2[i]>='0'&&s2[i]<='9') sum+=(s2[i]-'0');
                else sum+=(s2[i]-'a'+10);
                sum+=t;
                t=sum/20;
                sum%=20;
                if(sum<10) s+=(sum+'0');else s+=(sum-10+'a'); 
            }
            for(int i=n2;i<n1;i++)
            {
                int sum=0;
                if(s1[i]>='0'&&s1[i]<='9') sum+=(s1[i]-'0');
                else sum+=(s1[i]-'a'+10);
                sum+=t;
                t=sum/20;
                sum%=20;
                if(sum<10) s+=(sum+'0');else s+=(sum-10+'a');            
            }
            if(t!=0)
            {
               if(t<10) s+=(t+'0');else s+=(t-10+'a');
            }
            reverse(s.begin(),s.end());
            if(flag) s='-'+s;
            cout<<s<<"\n";
       }
       else
       {
           if(s1[0]=='-'&&s2[0]!='-') swap(s1,s2);
           s2=s2.substr(1,s2.length()-1);
           if(s1==s2) {cout<<"0\n";continue;}
           if(s1.length()<s2.length()||s1.length()==s2.length()&&s1<s2)  flag=1;
           if(flag) swap(s1,s2);
           reverse(s1.begin(),s1.end());
           reverse(s2.begin(),s2.end());
           int t=0;
           for(int i=0;i<s2.length();i++)
           {
               int dif;
               if(s1[i]>='0'&&s1[i]<='9') dif=(s1[i]-'0');
               else dif=(s1[i]-'a'+10);
               if(s2[i]>='0'&&s2[i]<='9') dif-=(s2[i]-'0');
               else dif-=(s2[i]-'a'+10);
               dif-=t;
               if(dif<0) {dif+=20;t=1;}
               else t=0;
               if(dif<10) s+=(dif+'0');else s+=(dif-10+'a');                  
           }
           for(int i=s2.length();i<s1.length();i++)
           {
               int dif;
               if(s1[i]>='0'&&s1[i]<='9') dif=(s1[i]-'0');
               else dif=(s1[i]-'a'+10);
               dif-=t;
               if(dif<0) {dif+=20;t=1;}
               else t=0;
               if(dif<10) s+=(dif+'0');else s+=(dif-10+'a');         
           }
           if(flag) s+='-';
           reverse(s.begin(),s.end());
           cout<<s<<'\n';    
       }
       
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?