Napisz program w języku c++ "Najmniejsza różnica do liczby palindromicznej".
Na wejściu jest liczba n - całkowita dodatnia < 100000000 I na wyjściu r - różnica jaka należy dodać do n, aby powstał z tego palindrom. np. dla n = 24911 wynikiem będzie 31, bo (24911 + 31 = 24942).
Odpowiedź: Kod jedynie dodaje, co oznacza że nie spełnia wymagania "najmniejsza różnica". Kod zawsze szuka palidromu większej od liczby którą wprowadziliśmy. Myślę że chociaż częściowo pomogłem.
#include <iostream>
using namespace std;
int char_na_int(char x) { //funkcja zwraca cyfre char na int
switch (x)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
int main() {
char tab1[9], tab2[9];
int counter{ 0 };
cin.get(tab1,9); //wpisywanie liczby
for (int i = 0; tab1[i]; i++) { // liczenie ilosci cyfr
counter++;
tab2[i] = tab1[i];
}
counter--; // indeks tablicy ostatniej cyfry
int con=counter; // kopia indeksu potrzebna do petli u dołu
for (int i = 0; i <= con -i; i++) {
if (tab2[i] != tab2[con]) {
if (tab2[i] > tab2[con]) tab2[con] = tab2[i];
else tab2[i] = tab2[con];
}
con--;
}
int liczba_przed=0, liczba_po=0; // rzutowanie na liczby aby obliczyc potrzebną liczne do dodania
int x{ 1 }; // zmienna pomocnicza
for (int i = counter; i >=0; i--) {
int a = char_na_int(tab1[i]);
int b = char_na_int(tab2[i]);
liczba_przed += (a * x);
liczba_po += (b * x);
x *= 10;
}
int wynik{ 0 }; //zmienna przechowyjaca sume potrzebna do dadania aby otrzymac palidrom
if (liczba_przed > liczba_po) { int wynik = liczba_przed - liczba_po; }
Odpowiedź: Kod jedynie dodaje, co oznacza że nie spełnia wymagania "najmniejsza różnica". Kod zawsze szuka palidromu większej od liczby którą wprowadziliśmy. Myślę że chociaż częściowo pomogłem.
#include <iostream>
using namespace std;
int char_na_int(char x) { //funkcja zwraca cyfre char na int
switch (x)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
int main() {
char tab1[9], tab2[9];
int counter{ 0 };
cin.get(tab1,9); //wpisywanie liczby
for (int i = 0; tab1[i]; i++) { // liczenie ilosci cyfr
counter++;
tab2[i] = tab1[i];
}
counter--; // indeks tablicy ostatniej cyfry
int con=counter; // kopia indeksu potrzebna do petli u dołu
for (int i = 0; i <= con -i; i++) {
if (tab2[i] != tab2[con]) {
if (tab2[i] > tab2[con]) tab2[con] = tab2[i];
else tab2[i] = tab2[con];
}
con--;
}
int liczba_przed=0, liczba_po=0; // rzutowanie na liczby aby obliczyc potrzebną liczne do dodania
int x{ 1 }; // zmienna pomocnicza
for (int i = counter; i >=0; i--) {
int a = char_na_int(tab1[i]);
int b = char_na_int(tab2[i]);
liczba_przed += (a * x);
liczba_po += (b * x);
x *= 10;
}
int wynik{ 0 }; //zmienna przechowyjaca sume potrzebna do dadania aby otrzymac palidrom
if (liczba_przed > liczba_po) { int wynik = liczba_przed - liczba_po; }
else wynik = liczba_po - liczba_przed;
cout << "nalezy dodac: " << wynik;
return 0;
}