原题链接
http://acm.hdu.edu.cn/showproblem.php?pid=6308
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int t,n;
int h,m;
char s[10],a[10];
scanf("%d",&t);
while(t--){
memset(s,0,sizeof(s));//初始化为0
memset(a,0,sizeof(a));//初始化为0
int time = 0;
int flag1 = 1;//记录正负
int flag2 = 1;//记录有无小数点
scanf("%d %d %s",&h,&m,s);
int len = strlen(s);
int j=0;
for(int i=4;i<len;i++){
if(s[i]=='.'){
flag2=0;
continue;
}
else{
a[j]=s[i];
j++;
}
}
if(s[3]=='-')
flag1 = 0;
time=atoi(a);//字符串转整型
int hh = 0;
int mm = 0;
if(!flag2){
hh=time/10.0;
mm=(time%10)*6;
}
else
hh=time;
if(!flag1){
hh += 8;
h = h-hh;
m = m-mm;
}
else{
hh -= 8;
h = h+hh;
m = m+mm;
}
if(m<0){
h--;
m+=60;
}
else if(m>=60){
h++;m-=60;
}
if(h>=24)
h-=24;
if(h<0)
h+=24;
printf("%02d:%02d\n",h,m);
}
return 0;
}
刚开始使用的字符串转浮点型由于精度问题没过,后来看了大神的代码得到启发
ps:大神代码地址:https://blog.youkuaiyun.com/l18339702017/article/details/81174567