Cześć, kod w zadaniu jest na 80 punktów.
Co poprawić? Myślę, że uwzględnianie który miesiąc ma 30, a który 31 dni nie ma sensu. O których warunkach zapomniałem?
#include <iostream>
#include <cmath>
using namespace std;
//yyyy-mm-dd -> binar
string dwa(int a, int b)
{
string liczba="", nowa; char x;
while(a>0 || liczba.length()<b)
{x=a%2+48; liczba=liczba+x; a=a/2;} nowa=liczba;
//odwrocenie kolejnosci zer i jedynek (wyzej uzyskana liczba w pierwsza cyfra najmniej znaczaca)
for(int i=0; i<liczba.length(); i++)
nowa[i]=liczba[liczba.length()-1-i];
return nowa;
}
int main()
{
string a;
cin >> a;
//binar na datę formatu yyyy-mm-dd
if(a.length()==16)
{
bool warunek=false; int x=6;
int y=1980, m=0, d=0;
for(x; x>=0; x--)
y+=(a[6-x]-48)*pow(2,x);
x=3;
for(x; x>=0; x--)
m+=(a[10-x]-48)*pow(2,x);
x=4;
for(x; x>=0; x--)
d+=(a[15-x]-48)*pow(2,x);
if(m==0 || m>12 || d==0 || d>31) cout << "ERROR";
else {cout << y << "-"; if(m<10) cout << "0" << m << "-"; else cout << m << "-"; if(d<10) cout << "0" << d; else cout << d;}
}
//zmiana daty formatu yyyy-mm-dd na binar
else if(a.length()==10)
{
int y=-1980, m=0, d=0, w=3; string l="";
for(w; w>=0; w--)
y+=(a[3-w]-48)*pow(10,w);
w=1;
for(w; w>=0; w--)
m+=(a[6-w]-48)*pow(10,w);
w=1;
for(w; w>=0; w--)
d+=(a[9-w]-48)*pow(10,w);
if(y<0 || y>127 || m>12 || d>31) cout << "ERROR";
else if(a[4]!=a[7] || a[4]!='-') cout << "ERROR";
else cout << dwa(y,7) << dwa(m,4) << dwa(d,5);
}
else cout << "ERROR";
return 0;
}