Problem4:时差问题。一个地方和北京相差17个小时(比北京慢17h),输入北京时间,输出当地时间;输入格式:年 月 日 时 分,输出格式一样。此题注意输出格式控制(后四项数字位数为两位)
#include <iostream>
#include <iomanip>
using namespace std;
bool isLeap(int year);
int main()
{
int yearB = 0;
int monB = 0;
int dayB = 0;
int hourB = 0;
int minB = 0;
int yearJ = 0;
int monJ = 0;
int dayJ = 0;
int hourJ = 0;
int minJ = 0;
int n = 0;
while (cin >> n)
{
for (int i = 0; i < n; i++)
{
cin >> yearB >> monB >> dayB >> hourB >> minB;
minJ = minB;
if (hourB >= 16)
{
yearJ = yearB;
monJ = monB;
dayJ = dayB;
hourJ = hourB - 16;
}
else
{
if (dayB == 1)
{
if (monB == 1 || monB == 2 || monB == 4 || monB == 6 || monB == 8 || monB == 9 || monB == 11)
{
if (monB == 1)
{
yearJ = yearB - 1;
monJ = 12;
dayJ = 31;
hourJ = hourB + 24 - 16;
}
else
{
yearJ = yearB;
monJ = monB - 1;
dayJ = 31;
hourJ = hourB + 24 - 16;
}
//if (monJ == 0)
//monJ = 12;
}
else if (monB == 5 || monB == 7 || monB == 10 || monB == 12)
{
yearJ = yearB;
monJ = monB - 1;
dayJ = 30;
hourJ = hourB + 24 - 16;
}
else//当前月份为三月
{
if (isLeap(yearB))
{
yearJ = yearB;
monJ = monB - 1;
dayJ = 29;
hourJ = hourB + 24 - 16;
}
else
{
yearJ = yearB;
monJ = monB - 1;
dayJ = 28;
hourJ = hourB + 24 - 16;
}
}
}
else
{
yearJ = yearB;
monJ = monB;
dayJ = dayB - 1;
hourJ = hourB + 24 - 16;
}
}
cout << yearJ << " " << setw(2) << setfill('0') << monJ << " " << setw(2) << setfill('0') << dayJ << " " << setw(2) << setfill('0') << hourJ << " " << setw(2) << setfill('0') << minJ << endl;
}
}
}
bool isLeap(int year)
{
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
return true;
else
return false;
}