【问题描述】
设计一个程序用于向后推算指定日期经过n天后的具体日期。
【输入形式】
-
输入为长度为8的字符串str和一个正整数n,str前四位表示年份,后四位表示月和日。
【输出形式】
-
当推算出的年份大于4位数时,输出"out of limitation!",否则输出8位的具体日期。
#include<iostream>
#include<string>
using namespace std;
int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int main()
{
char c[9];
int n,y1;
cin >> c>>n;
int y, m, d;
y = 1000 * (c[0]-48) + 100 * (c[1]-48) + 10 * (c[2]-48) +( c[3]-48);
m = 10 * (c[4]-48) + (c[5]-48);
d = 10 * (c[6]-48) + (c[7]-48);//化年,月,日为数字
y1=y;
y = y1 + n / 365;
n = n % 365;
for(int t=y1;t<y;t++)
{
if ((t % 4 == 0 && t % 100 != 0) || t % 400 == 0) n--;
}//减去闰年多的一天
if(n<0)
{
if (((y-1) % 4 == 0 && (y-1) % 100 != 0) || (y-1) % 400 == 0)
{
n=n+366;
y-=1;
}
else
{
n+=365;
y-=1;
}
}//确保n>0
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) month[1] =29;
for (int i=m-1; i < 12; i++)
{
if (n - month[i] > 0) n =n - month[i];
else
{
m = i+1;
break;
}
}
if(n>31)
{
y++;
m=1;
month[1]=28;
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) month[1] =29;
for(int i=m-1;i<12;i++)
{
if (n - month[i] > 0) n =n-month[i];
else
{
m = i+1 ;
break;
}
}
}
d = d + n;
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
{
if(d>31)
{
m =m+1;
d =d-32;
}
if (m > 12)
{
y = y + 1;
m = m - 12;
}
}
if(m==4||m==6||m==9||m==11)
{
if (d > 30)
{
m = m + 1;
d = d - 30;
}
}
if (m == 2)
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
{
if (d > 29)
{
m = m + 1;
d = d - 29;
}
}
else
{
if (d > 28)
{
m = m + 1;
d = d - 28;
}
}
}
if (y > 9999) cout << "out of limitation!" << endl;
if(y>999 && y<10000)
{
cout<<y;
if (m < 10)
{
cout << "0" << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
else
{
cout << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
}
if (y < 1000 && y>99)
{
cout << "0" << y;
if (m < 10)
{
cout << "0" << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
else
{
cout << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
}
if (y < 100 && y>9)
{
cout << "00" << y;
if (m < 10)
{
cout << "0" << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
else
{
cout << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
}
if (y < 10)
{
cout << "000" << y;
if (m < 10)
{
cout << "0" << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
else
{
cout << m;
if (d < 10) cout << "0" << d;
else cout << d;
}
}
return 0;
}