Alx09

Untitled

May 13th, 2020 (edited)
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int Palindrom2(int n) // verificam daca este palindrom in baza 2
  6. {
  7.     int v[33], nr = 0, i, x = n; // variabile auxilare
  8.  
  9.     while (x) // cat timp exista numarul
  10.     {
  11.         v[nr++] = x % 2;//punem restul imparitiri la 2 in vector
  12.         x /= 2; // impartim la 2
  13.     }
  14.     for (i = 0; i < nr; i++) // verificaam daca cifrele pe pozitii simetrice sunt aceleasi
  15.         if (v[i] != v[nr - 1 - i])  // in caz ca sunt fiertie returnam 0
  16.             return 0;
  17.  
  18.     return 1; // altfel raturnam 1
  19. }
  20.  
  21. int Palindrom8(int n) // verificam daca este palindrom in baza 8
  22. {
  23.     int  nr = 0, v[33], i; // variabile auxiliare
  24.     int  x = n; // copiem n
  25.     while (x) //cat timp exista x
  26.     {
  27.         v[nr++] = x % 8; // puntem restul impartiri la 8 in vector
  28.         x /= 8; // impartim la 8 numarul
  29.     }
  30.     for (i = 0; i < nr; i++)// cumparam din nou cifrele pe poziti simetrice fata de milojc
  31.         if (v[i] != v[nr - 1 - i]) // in caz ca sunt diferite
  32.             return 0; // afisam 0
  33.  
  34.     return 1;// altfel afisam 1
  35. }
  36. int Palindrom10(int n) // verificam daca este palindrom in baza 10
  37. {
  38.     long long c = 0, x = n; // variabile ajutatoare
  39.     while (x) // cat timp exista
  40.     {
  41.         c = c * 10 + x % 10;// construim inversul numarului
  42.         x /= 10; // impartim la 10
  43.     }
  44.     if (n == c) // daca numarul este egal cu inversul este palinfro
  45.         return 1; // returnam 1
  46.     return 0; // altfel returnam 0
  47. }
  48.  
  49. int Palindrom16(int n) // verificam daca este palindrom in baza 16
  50. {
  51.     int i, nr = 0;// variabile auxiliare
  52.     char v[33]; // salvam cifrele numarul in el
  53.     int x = n;
  54.     while (x) // cat timp exista x ( x este diferit de 0)
  55.     {
  56.         if (x % 16 <= 9) // daca restul imparitiri este mai mic sau egal cu 9 i-l adaugam in vector
  57.             v[nr++] = x % 16 + '0';
  58.         else
  59.             v[nr++] = 'A' + (x % 16) - 10;// altfel adauagm litera corespunzatoare falori hexazecimale
  60.         x /= 16; // impartim numarul la 10
  61.     }
  62.     for (i = 0; i < nr; i++) // verificam daca pozitiile simetrice fata de miljoc sunt aceleasi
  63.         if (v[i] != v[nr - 1 - i]) // daca sunt diferite
  64.             return 0; // returnam 0
  65.  
  66.     return 1;// altfel returnam 1
  67. }
  68.  
  69. int main() {
  70.     int n, i; // variabile ajutatoare
  71.     FILE *f; // variabila de tip fiser
  72.     f = fopen("in.txt", "r");// deschidem in mod citire
  73.     fscanf(f, "%d", &n); // citim n din fiser
  74.     fclose(f);// nu ne mai trebuie fiserul asa ca-l inchidem
  75.     f = fopen("out.txt", "w"); // deschidem in mod scriere
  76.     for (i = 0; i <= n; i++)
  77.         if (Palindrom10(i) + Palindrom16(i) + Palindrom2(i) + Palindrom8(i) > 1)
  78.             fprintf(f, "%d\n", i); // in caz ca este palindrom in baza 2, sau 8 sau 10 si in 16 i-l afisem
  79.    
  80.     fclose(f);
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment