Advertisement
mihainan

Lab4 PC - ex 6 (CA)

Oct 23rd, 2014
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.56 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int number_of_digits(int n)
  4. {
  5.     if(n == 0)
  6.         return 0;
  7.     else
  8.         return 1 + number_of_digits(n/10);
  9. }
  10.  
  11. int power(int x, int y)
  12. {
  13.     if(y == 0)
  14.         return 1;
  15.     else
  16.         return x * power(x, y-1);
  17. }
  18.  
  19. int reverse_number(int n)
  20. {
  21.     int nr, rez, rest;
  22.     if(n == 0 )
  23.     {
  24.         return 0;
  25.     }
  26.     else
  27.     {
  28.         rest = n % 10;
  29.         nr = number_of_digits(n/10);
  30.         rez = rest * power(10, nr);
  31.         return reverse_number(n / 10) + rez;
  32.     }
  33. }
  34.  
  35. /*
  36.     Afiseaza 1 daca este palindrom si 0 in rest!
  37. */
  38. int palindrome(int nr)
  39. {
  40.     if(nr == reverse_number(nr))
  41.         return 1;
  42.     else
  43.         return 0;
  44. }
  45.  
  46. int next_palindrome(int nr)
  47. {
  48.     while(!palindrome(nr))
  49.     {
  50.         nr++;
  51.     }
  52.     return nr;
  53. }
  54.  
  55. /*
  56.     Afiseaza 1 daca este prim si 0 in rest!
  57. */
  58. int prim(int nr)
  59. {
  60.     int i;
  61.     for(i = 2; i <= nr / 2; i++)
  62.     {
  63.         if(nr % i == 0)
  64.             return 0;
  65.     }
  66.     return 1;
  67. }
  68.  
  69. int min_prim(int nr)
  70. {
  71.     while(!prim(nr))
  72.     {
  73.         nr--;
  74.     }
  75.     return nr;
  76. }
  77.  
  78. int max_prim(int nr)
  79. {
  80.     while(!prim(nr))
  81.     {
  82.         nr++;
  83.     }
  84.     return nr;
  85. }
  86.  
  87. void afiseaza_prim(int nr)
  88. {
  89.     int min, max, dif1, dif2;
  90.     if(!prim(nr))
  91.     {
  92.         min = min_prim(nr);
  93.         max = max_prim(nr);
  94.         dif1 = nr - min;
  95.         dif2 = max - nr;
  96.         if(dif1 == dif2)
  97.         {
  98.             printf("%d %d\n", min, max);
  99.         }
  100.         if(dif1 < dif2)
  101.         {
  102.             printf("%d\n", min);
  103.         }
  104.         if(dif2 < dif1)
  105.         {
  106.             printf("%d\n", max);
  107.         }
  108.     }
  109. }
  110.  
  111. int main()
  112. {
  113.     int x, nr;
  114.     scanf("%d ", &x);
  115.     nr = reverse_number(x);
  116.     printf("%d\n", nr);
  117.     nr = next_palindrome(120);
  118.     printf("%d\n", nr);
  119.     while(x > 0)
  120.     {
  121.         afiseaza_prim(x);
  122.         scanf("%d ", &x);
  123.     }
  124.     return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement