Zdravím,
jsem začátečník a mám za úkol napsat v C program na zjištění číselného palindromu, ale nevím jak napsat část, kdy se z čísla (např: a=83 stane číslo b=38 ). Nedokázal by mi někdo poradit prosím?
Ahoj, rozsekej číslo do pole a pak ho prožeň cyklem pozpátku a postupně sestavuj nové číslo...malá nápověda...
číslo např. 438 se dá napsat jako...
4 x 100 + 3 x 10 + 8 x 1....když ho proženeš cyklem, tak ho sestavíš jako 8 x 100 + 3 x 10 + 4 x 1....
zkonvertovat číslo na řetězec, vytvořit nový řetězec tak, že tak první přečteš po znacích pozpátku a zkonvertuješ na číslo. Stačí sprintf, cyklus for a pak sscanf.
hu
ještě jednodušší je použít třídu string ze STL, viz http://www.cplusplus.com/reference/string/string/rend/
hu
jak zjistím? Tím, že to číslo rozeberu na cifry. Mohu si na to napsat funkci, ta bude dělat to samé, co se děje při převodu na jakýkoliv řetězec, bez ohledu na to, jestli je to nul terminated string, nebo string ze STL..... Akorát se s tím víc nadřu.
hu
pokud je to v C++ tak
#include <iostream>
#include <string>
using namespace std;
int main()
{
string cislo;
cout << "Zadej cislo: ";
getline(cin, cislo);
reverse(cislo.begin(), cislo.end());
cout << "Obracene cislo: " << cislo;
return 0;
}
a v C to může být takto, v C nedělám, takže to možná jde lépe, takto procházim celej buffer
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, cislo;
char buffer[10];
printf("Zadej cislo: ");
scanf("%d", &cislo);
itoa(cislo, buffer, 10);
for (i = sizeof(buffer); i >= 0; --i)
{
if (*(buffer + i) > 0)
printf("%c", *(buffer + i));
}
return 0;
}
Dík za rady, ale pořad mi to nějak nejde udělat (pole jsem ještě ani nebrali)... Teď jsem ještě zkoušel ten program co jsem napsal pan Ingiraxo a ten mi jako výsledek vyhodí řetězec a ne číslo... abych to upřesnil potřebuji například z čísla a=123 udělat číslo b=321 a poté tyto dvě čísla sečíst.
#12 Lukas
to v zadání nebylo... v každým případě není problém to lehce upravit
int main()
{
int i, j, cislo, cislo2;
char buffer[10], out[10];
printf("Zadej cislo: ");
scanf("%d", &cislo);
itoa(cislo, buffer, 10);
for (i = sizeof(buffer), j = 0; i >= 0; --i)
{
if (*(buffer + i) > 0)
sprintf((out + j++), "%c", *(buffer + i));
}
cislo2 = atoi(out);
printf("Soucet cisel %d a %d je: %d", cislo, cislo2, cislo + cislo2);
return 0;
}
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku