代码1
(但是通过不了测试点4)
代码1思路:
以字符串读入,然后转数字,这样字符串大小就可以直接比较看是否是负数
#include<iostream>
using namespace std;
int pi,pj,pk,ai,aj,ak,a,b,c;
void func(int ai,int aj,int ak,int pi,int pj,int pk)
{
if(ak<pk)
{
ak+=29;aj--;
ak-=pk;
}
else{
ak-=pk;
}
if(aj<pj)
{
aj+=17;ai--;
aj-=pj;
}
else{
aj-=pj;
}
cout<<ai-pi<<'.'<<aj<<'.'<<ak;
}
int main()
{
string p,a;cin>>p>>a;
//判断负数
int f=0;
if(p>a)
{
f=1;
}
//字符串转数字
int m=0,n=0;
for(int i=0;n<2&&i<p.size();i++)
{
if(p[i]=='.')
{
if(n==0)
{
pi=stoi(p.substr(m,i-m));
}
if(n==1)
{
pj=stoi(p.substr(m,i-m));
}
m=i+1;
n++;
}
}
pk=stoi(p.substr(m));
m=0,n=0;
for(int i=0;n<2&&i<a.size();i++)
{
if(a[i]=='.')
{
if(n==0)
{
ai=stoi(a.substr(m,i-m));
}
if(n==1)
{
aj=stoi(a.substr(m,i-m));
}
m=i+1;
n++;
}
}
ak=stoi(a.substr(m));
if(f){
cout<<'-';
func(pi,pj,pk,ai,aj,ak);
}
else{
func(ai,aj,ak,pi,pj,pk);
}
return 0;
}
知识点:
字符串转int:stoi()
截取字符串:substr()
代码2
(偷别人的,AC了)
代码2思路:
统一进制,可以都统一成“个位”,想理解统一成sum和把sum再%29/17的操作可以类比十进制的个十百位:
个*10=十 十*10=百
“个”*29=“十” “十”*17=“百”
想对单位是“个”的sum保留“个位”,得除以“10”,即“29”,即个位到十位的一个进制(以此类推)
#include<iostream>
using namespace std;
int pi,pj,pk,ai,aj,ak,i,j,k;
int main()
{
scanf("%d.%d.%d %d.%d.%d",&pi,&pj,&pk,&ai,&aj,&ak);
long long sum=ak-pk+29*(aj-pj+17*(ai-pi));
if(sum<0)
{
cout<<'-';
sum=-sum;
}
k=sum%29;
j=sum/29%17;
i=sum/29/17;
cout<<i<<'.'<<j<<'.'<<k;
return 0;
}
知识点:
1进制(见思路)
2当我们先将它们都转成“个位”,然后作差之后,就只用把差值(个位)再转为他规定的进制既可,中间只是考虑一个负数问题,说白了还是差的绝对值