Новый год - один из любимых праздников Вовочки. Только встретив один, он тут же начинает ждать следующий. Узнайте по текущей дате, сколько еще дней придется провести Вовочке в ожидании нового года.
Формат входных данных
С клавиатуры вводится одна строка - сегодняшняя дата в формате "ДД. ММ. ГГГГ".
Формат выходных данных
Выведите одно число - количество дней до нового года.
Примечания
Не забудьте, что год может быть високосным. Високосный - это тот, который делится на 400 или делится на 4, но не делится на 100.
входные данные
31.12.2019
выходные данные
1
входные данные
01.01.2020
выходные данные
366
C/C++
Всем привет. Помогите пожалуйста с задачей на C++
#include <iostream>
#include <string>
#include <cmath>
#include <cstdlib>
using namespace std;
bool vis_year (string data)
{
int i = 0, j = data.length() - 1;
int year = 0;
while (i < 4 && data[j] != '.')
{
year += (data[j] - '0') * pow(10,i);
i++;
j--;
}
if ( year % 400 == 0 || year % 4 == 0 && year % 100 != 0 )
return true;
return false;
}
int get_mon (string data)
{
int i = data.length()-1;
while (data[i] != '.' && i >= 0) i--;
i--; // пропускаем точку.
char mon[5];
int j = 0;
while (data[i] != '.' && i >= 0)
{
j++;
i--;
}
if (j > 2)
{
cerr << "Неверный формат даты." << endl;
return -1;
}
int x;
for (x = 0; x < j; x++, i++)
mon[x] = data[i+1];
mon [j] = '\0';
//cout << "x = " << x << endl;
//cout << "j = " << j << endl;
int mont = atoi(mon);
if (mont < 1 || mont > 12)
{
cerr << "Неверное значение месяца. " << mont << ' ' << mon << endl;
return -2;
}
return mont;
}
int get_day (string data, int mon, bool vis)
{
int x = 0;
char day[5];
while (data[x] != '.' && x < data.length())
{
day[x] = data[x];
x++;
}
day[x] = '\0';
if (x > 2)
{
cerr << "Неверное значение даты. " << endl;
return -1;
}
int day_i = atoi(day);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8
|| mon == 10 || mon == 12)
{
if (day_i > 0 && day_i < 32)
return day_i;
}
else if (mon == 4 || mon == 6 || mon == 9 || mon == 11)
{
if (day_i > 0 && day_i < 31)
return day_i;
}
else if (mon == 2)
{
if (vis)
{
if (day_i > 0 && day_i < 30)
return day_i;
}
else
{
if (day_i > 0 && day_i < 29)
return day_i;
}
}
return -2;
}
int main()
{
int days_mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int lost = 0; // сколько осталось дней
string data;
cout << "Введите дату: ";
cin >> data;
bool vis = vis_year(data);
int mon = get_mon (data);
if (mon >= 1 && mon <= 12)
{
int day = get_day(data,mon,vis);
if (day > 0 && day < 32)
{
if (vis)
{
if (mon > 2)
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day;
}
else
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
lost++;
}
}
else
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
}
}
}
cout << lost << endl;
return 0;
}
#include <string>
#include <cmath>
#include <cstdlib>
using namespace std;
bool vis_year (string data)
{
int i = 0, j = data.length() - 1;
int year = 0;
while (i < 4 && data[j] != '.')
{
year += (data[j] - '0') * pow(10,i);
i++;
j--;
}
if ( year % 400 == 0 || year % 4 == 0 && year % 100 != 0 )
return true;
return false;
}
int get_mon (string data)
{
int i = data.length()-1;
while (data[i] != '.' && i >= 0) i--;
i--; // пропускаем точку.
char mon[5];
int j = 0;
while (data[i] != '.' && i >= 0)
{
j++;
i--;
}
if (j > 2)
{
cerr << "Неверный формат даты." << endl;
return -1;
}
int x;
for (x = 0; x < j; x++, i++)
mon[x] = data[i+1];
mon [j] = '\0';
//cout << "x = " << x << endl;
//cout << "j = " << j << endl;
int mont = atoi(mon);
if (mont < 1 || mont > 12)
{
cerr << "Неверное значение месяца. " << mont << ' ' << mon << endl;
return -2;
}
return mont;
}
int get_day (string data, int mon, bool vis)
{
int x = 0;
char day[5];
while (data[x] != '.' && x < data.length())
{
day[x] = data[x];
x++;
}
day[x] = '\0';
if (x > 2)
{
cerr << "Неверное значение даты. " << endl;
return -1;
}
int day_i = atoi(day);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8
|| mon == 10 || mon == 12)
{
if (day_i > 0 && day_i < 32)
return day_i;
}
else if (mon == 4 || mon == 6 || mon == 9 || mon == 11)
{
if (day_i > 0 && day_i < 31)
return day_i;
}
else if (mon == 2)
{
if (vis)
{
if (day_i > 0 && day_i < 30)
return day_i;
}
else
{
if (day_i > 0 && day_i < 29)
return day_i;
}
}
return -2;
}
int main()
{
int days_mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int lost = 0; // сколько осталось дней
string data;
cout << "Введите дату: ";
cin >> data;
bool vis = vis_year(data);
int mon = get_mon (data);
if (mon >= 1 && mon <= 12)
{
int day = get_day(data,mon,vis);
if (day > 0 && day < 32)
{
if (vis)
{
if (mon > 2)
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day;
}
else
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
lost++;
}
}
else
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
}
}
}
cout << lost << endl;
return 0;
}
Похожие вопросы
- Помогите пожалуйста с задачей на c++, если кто-нибудь захочет помочь.
- Помогите пожалуйста решить задачу на C ИЛИ C#
- Помогите пожалуйста с задачей на C++
- Помогите пожалуйста с задачей на C++
- Помогите пожалуйста решить задачу на C++
- Прошу помочь с двумя задачами по C++. Есть код моей попытки. Буду рад если напишите проги.
- Помогите пожалуйста сделать задачу по программированию C++
- Помогите пожалуйста с задачей, нужно написать на c++ программу
- Помогите, пожалуйста, решить задачу C++.
- Помогите пожалуйста написать код на c++, выводящий имя, фамилию и дату рождения нескольких человек
{
int days_mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int lost = 0; // сколько осталось дней
string data;
cout << "Введите дату: ";
cin >> data;
bool vis = vis_year(data);
int mon = get_mon (data);
if (mon >= 1 && mon <= 12)
{
int day = get_day(data,mon,vis);
if (day > 0 && day < 32)
{
if (vis)
{
if (mon > 2)
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
}
else
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
lost++;
}
}
else
{
for(int x = mon; x < 12; x++)
lost += days_mon[x];
lost += days_mon[mon-1] - day + 1;
}
}
}
cout << lost << endl;
return 0;
}