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 + -
显示快捷键?