2018杭電多校第一場1011(hdu 6308)
阿新 • • 發佈:2018-11-11
題解:這題主要會超時,不能用string。可以使用sscanf提取字串。
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<queue> #include<stack> #include<vector> #include<string.h> using namespace std; int main() { char a[20]; int T,hour,min; scanf("%d",&T); while(T--) { scanf("%d",&hour); scanf("%d",&min); scanf("%s",&a); int ans = hour*60+min; int c; double z = -1; // sscanf(a+4,"%lf",&z); if(a[3] == '+') { sscanf(a,"%*[^+]+%lf",&z);//表示忽略+前面的字元,取出+之後的字元 c = int(z*10 + 0.1);//必須加0.1,否則會出現精度丟失 c = c*6-8*60; } else { sscanf(a,"%*[^-]-%lf",&z); c = int(z*10 + 0.1);//必須加0.1,否則會出現精度丟失 c = -c*6-8*60; } ans += c; ans %= (24*60);//24*60表示一天的分鐘數 if(ans < 0) ans += 24*60;//如果時間向後退,則從24:00開始後退 printf("%02d:%02d\n",ans/60,ans%60); } return 0; }