Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int palindrom_10(int n) // verificam daca este palindrom in baza 10
- {
- long long c = 0, x = n; // variabile ajutatoare
- while (x) // cat timp exista
- {
- c = c * 10 + x % 10; construim inversul numarului
- x /= 10; // impartim la 10
- }
- if (n == c) // daca numarul este egal cu inversul este palinfro
- return 1; // returnam 1
- return 0; /// altfel returnam 0
- }
- int palindrom_2(int n) // verificam daca este palindrom in baza 2
- {
- int v[33], nr = 0, j, x = n; // variabile auxilare
- while (x) // cat timp exista numarul
- {
- v[nr++] = x % 2;//punem restul imparitiri la 2 in vector
- x /= 2; // impartim la 2
- }
- for ( j = 0; j < nr; j++) // verificaam daca cifrele pe pozitii simetrice sunt aceleasi
- if (v[j] != v[nr - 1 - j]) // in caz ca sunt fiertie returnam 0
- return 0;
- return 1; // altfel raturnam 1
- }
- int palindrom_8(int n) // verificam daca este palindrom in baza 8
- {
- int nr = 0, v[33], j; // variabile auxiliare
- int x = n; // copiem n
- while (x) //cat timp exista x
- {
- v[nr++] = x % 8; // puntem restul impartiri la 8 in vector
- x /= 8; // impartim la 8 numarul
- }
- for ( j = 0; j < nr; j++)// cumparam din nou cifrele pe poziti simetrice fata de milojc
- if (v[j] != v[nr - 1 - j]) // in caz ca sunt diferite
- return 0; // afisam 0
- return 1;// altfel afisam 1
- }
- int palindrom_16(int n) // verificam daca este palindrom in baza 16
- {
- int j , nr = 0;// variabile auxiliare
- char v[33]; // salvam cifrele numarul in el
- int x = n;
- while (x) // cat timp exista x ( x este diferit de 0)
- {
- if (x % 16 <= 9) // daca restul imparitiri este mai mic sau egal cu 9 i-l adaugam in vector
- v[nr++] = x % 16 + '0';
- else
- v[nr++] = 'A' + (x % 16) - 10;// altfel adauagm litera corespunzatoare falori hexazecimale
- x /= 16; // impartim numarul la 10
- }
- for ( j = 0; j < nr; j++) // verificam daca pozitiile simetrice fata de miljoc sunt aceleasi
- if (v[j] != v[nr - 1 - j]) // daca sunt diferite
- return 0; // returnam 0
- return 1;// altfel returnam 1
- }
- int main() {
- int n, i, d; // variabile ajutatoare
- FILE *f; // variabila de tip fiser
- f = fopen("in.txt", "r");// deschidem in mod citire
- fscanf(f, "%d", &n); // citim n din fiser
- fclose(f);// nu ne mai trebuie fiserul asa ca-l inchidem
- f = fopen("out.txt", "w"); // deschidem in mod scriere
- for (i = 0; i <= n; i++)
- {
- d = 0; // pentru a numara in cate baza este palindrom
- d += palindrom_2(i); // i-l adunam cu valoarea returnata
- d += palindrom_8(i); //i-l adunam cu valoarea returnata
- if (d > 1) { // daca este deja palindrom in 2 baze nu mai este necesar sa le verificam pe retsu
- fprintf(f, "%d\n", i); // asa ca afisam numarul
- continue; // si ne ducem la urmatoarea iteratie a lui i
- }
- d += palindrom_10(i); // daca ajungem aici insemana ca e palindrom in ce-l mult o baza
- if (d > 1) { // din nou daca este palindrom in ce-l putin doua baze
- fprintf(f, "%d\n", i);// i-l afisam
- continue; // ne ducem la urmatoarea iteratie a lui i
- }
- d += palindrom_16(i); // inseamna ca e ce-l palindrom in maxim o baza 2,8,10
- if (d > 1) // am verificat toate bazele
- fprintf(f, "%d\n", i); // in caz ca este palindrom in baza 2, sau 8 sau 10 si in 16 i-l afisem
- }// ne intoarcem la urmatoarea iteratie a lui i
- fclose(f);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement