Problem z zadaniem związanym z palindromami i systemami liczbowymi

0

Potrzebuję pomocy w zadaniu, którego kod jest przedstawiony poniżej.
Program powinien wypisywać ile liczb w danym systemie jest liczbami palindromicznymi.
Przykładowo dla 17 wychodzi wyniki:

2 1
3 1
4 2
5 2
6 2
7 2
8 2
9 2
10 2
11 2
12 2
13 2
14 2
15 2
16 3

Co powinienem poprawić aby wynik wyglądał tak:

2 1
3 0
4 1
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0
13 0
14 0
15 0
16 1
#include <iostream>
using namespace std;

string zamiana(int d, int podstawa)
{
    string b="";
    int cyfra;
    while(d>0)
    {
        cyfra=d%podstawa;
        if(cyfra<10)
            b=char('0'+cyfra)+b;
        else
            b=char('A'-10+cyfra)+b;
        d=d/podstawa;
    }
    return b;
}
bool palindrom(string liczba)
{
    bool c=true;
    for(int i=0; i<liczba.size()/2; i++)
    {
        if(liczba[i]!=liczba[liczba.size()-1-i])
        {
            c=false;
            break;
        }
    }
    return c;
}
int main()
{
    int a, l=0, podstawa;
    string b="";
    bool c=true;
    while(cin>>a)
    {
        for(podstawa=2; podstawa<=16; podstawa++)
        {
            if(palindrom(zamiana(a, podstawa)))
            {
                l++;
            }
            cout<<podstawa<<" "<<l<<endl;
        }
    }
    return 0;
}
0

A co oznaczają te dane wejściowe?
Co znaczy "ile liczb w danym systemie jest liczbami palindromicznymi"?
Twój kod robi coś innego niż moje zrozumienie tego zdania.

Może podaj pełną treść zadania.

1
soilehpa napisał(a):

Program powinien wypisywać ile liczb w danym systemie jest liczbami palindromicznymi.

Odpowiedź: W każdym systemie liczbami palindromicznymi są nieskończenie wiele liczb.

0

@soilehpa: Robisz co innego niż powinieneś, żeby dostać to wyjście, zliczasz ile razy dana liczba jest palindromem w systemach od dwójkowego do szesnastkowego, a Masz tylko wydrukować 1 gdy liczba jest palindromem w danym systemie i 0 w przeciwnym przypadku. Czyli wystarczy wywalić tego "ifa" w pętli, a zamiast niego dać:

cout <<podstawa<< " " << (int) palindrom(zamiana(a, podstawa))<<"\n";
0

Zoptymalizowałem, nieco oraz dodałem kolumnę wynik po zamianie (skonwertowana liczba jest odwrócona, ale nie powinno to wpłynąć na stwierdzenie czy jest palindromem):

#include <iostream>
using namespace std;

string convert(int value,int base)
{
    string result;
    for(int next=1;next;value=next) // przybnajmniej raz przejdzi aby poprawnie skonwertować wartość 0
    {
    	next=value/base;
        int cyfra=value-next*base;
        result+=char(cyfra<10?'0'+cyfra:'A'-10+cyfra);
    }
    return result;
}

bool palindrom(const string &str)
{
    for(int i=0,k=str.size()-1;i<k;++i,--k) if(str[i]!=str[k]) return false;
    return true;
}

int main()
{
    for(int value;cin>>value;)
    {
        for(int base=2;base<=16;++base)
        {
            cout<<base<<" "<<palindrom(convert(value,base))<<" "<<convert(value,base)<<endl;
        }
    }
    return 0;
}

Dla podanej wartości 3, mam wynik:

3
2 1 11
3 0 01
4 1 3
5 1 3
6 1 3
7 1 3
8 1 3
9 1 3
10 1 3
11 1 3
12 1 3
13 1 3
14 1 3
15 1 3
16 1 3

Więc nie rozumiem co autor pytania chce uzyskać?
@lion137 jako że, niby zrozumiałeś to proszę o wyjaśnienie.

2

@_13th_Dragon:
To co autor chce uzyskać to to co podał jako prawidłowy wydruk da 17, czyli oznaczenie jedynką/zerem, czy w danym systemie liczba wejściowa jest palindromem, 1, czy nie, 0. Problem jest taki, że o co innego zapytał, a co innego mówi listing i program.
I OK, dla trójki Masz prawidłowy wynik, dla 10 też będzie dobrze:

2 0
3 1
4 1
5 0
6 0
7 0
8 0
9 1
10 0
11 1
12 1
13 1
14 1
15 1
16 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1