Programowanie zstępujące to rozbijanie problemu na małe podproblemy (metody klasy C++, lub funkcje C)

W przypadku zadania 59.2 może to wyglądać następująco (brakuje tylko obsługi pliku):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>

using namespace std;

//brakuje: angielska przestrzeń nazw

//zwraca string z liczby int
//nie trzeba używać standardu c++11 z tą funkcją
string to_string_fx(int number)
{
    char b[ 32 ]; //stary string 32 znaki
    itoa( number, b, 10 ); //zamieniamy number na string b w systemie 10
    string wynik(b); //zamiana starego stringu char[] na zmienną typu string
    return wynik;
}


//zwraca string zapisany od tyłu
string odwroc_str(string str)
{      
    string odwr_str = "";          
    for (int i=0; i<str.length(); i++) //tyle razy, ile długość stringu
        odwr_str = str[i] + odwr_str; //doklejamy znaki ale na początku 81 -> 18 im bardziej cyfra z tyłu liczby tym później doklejona

    return odwr_str;
}



//zwraca liczbę w odwrotnej kolejności: 18 -> 81
int odwroc_liczbe(int liczba)
{
        int wynik;
        string liczba_str = to_string_fx(liczba), //zamien liczbe na string
               liczba_odwr_str = "";
               
        liczba_odwr_str = odwroc_str(liczba_str); //odwroc string
       
        wynik = (int) strtol(liczba_odwr_str.c_str(), NULL, 10); //zamienc odwrocony string na liczbe
        return wynik; //zwroc odwrocona liczbe
}


//zwraca:
//true - jeśli str jest palindromem
//false - jeśli nie jest
bool sprawdz_czy_palindrom(string str)
{
        //w petli wczytaj string do połowy i sprawdz str[0] == str[str.length()-1]   czy pierwsza jest == ostatnia
        for (int i=0; i<str.length()/2; i++)
           if (str[i] != str[str.length()-1-i]) //[0]!=[str.length()-1]  ostatnia,  [1]!=[str.length()-2] przedostatnia
              return false;
             
    return true;
}


//zwraca odpowiedz na zadanie 59.2 czyli
//true - jeśli suma liczby i jej odwrotnosci jest palindromem
//false - jeśli nie jest
bool zadanie59_2(int liczba)
//sprawdza czy suma liczby+odwr jest palindromem
{
        string wynik_str = to_string_fx( liczba+odwroc_liczbe(liczba) );
        return sprawdz_czy_palindrom(wynik_str);
}

int main(int argc, char** argv) {
        //cout << odwroc_liczbe(81);
        //trzeba dopisać obsługę plików
        cout << (zadanie59_2(19) ? "TAK" : "NIE");
        return 0;
}