Advertisement
a53

nr_pal

a53
Mar 4th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. /// Vlad Tir, Colegiul National "Tudor Vladimirescu", Targu-Jiu
  2. #include <cstdio>
  3.  
  4. int nr_cifre(int n) /// Calculeaza numarul de cifre ale lui n
  5. {
  6. int nr=0;
  7. if(n==0)
  8. return 1;
  9. while(n>0)
  10. ++nr,n/=10;
  11. return nr;
  12. }
  13.  
  14. int putere(int a,int b) /// Calculeaza a^b
  15. {
  16. int p=1;
  17. for(int i=1;i<=b;++i)
  18. p*=a;
  19. return p;
  20. }
  21.  
  22. int inversul(int n) /// Calculeaza inversul lui n
  23. {
  24. int invers=0;
  25. while(n>0)
  26. invers=invers*10+n%10,n/=10;
  27. return invers;
  28. }
  29. int nr_pal(int n)
  30. {
  31. if(n==-1)
  32. return 0;
  33. int c=nr_cifre(n),nr_de_pal=1;
  34. if(c%2==1) /// Daca n are numar impar de cifre
  35. {
  36. nr_de_pal+=2*(putere(10,c/2)-1);
  37. int pal=n/putere(10,c/2)*putere(10,c/2)+inversul(n/putere(10,c/2+1)); /// Palindromul de c cifre format din primele c/2+1 cifre ale lui n
  38. if(n>=pal) /// Daca n este mai mare decat pal,
  39. nr_de_pal+=n/putere(10,c/2)-putere(10,c/2)+1; /// avem o solutie in plus
  40. else
  41. nr_de_pal+=n/putere(10,c/2)-putere(10,c/2);
  42. }
  43. else /// altfel (adica n are numar par de cifre)
  44. {
  45. nr_de_pal+=2*(putere(10,(c-1)/2)-1)+9*putere(10,(c-1)/2);
  46. int pal=n/putere(10,c/2)*putere(10,c/2)+inversul(n/putere(10,c/2)); /// Palindromul de c cifre format din primele c/2 cifre ale lui n
  47. if(n>=pal) /// Daca n este mai mare decat pal,
  48. nr_de_pal+=n/putere(10,c/2)-putere(10,c/2-1)+1; /// avem o solutie in plus
  49. else
  50. nr_de_pal+=n/putere(10,c/2)-putere(10,c/2-1);
  51. }
  52. return nr_de_pal;
  53. }
  54.  
  55. int main()
  56. {
  57. int n;
  58. freopen("nr_pal.in","r",stdin);
  59. freopen("nr_pal.out","w",stdout);
  60. scanf("%d",&n);
  61. for(int i=1;i<=n;++i)
  62. {
  63. int a,b;
  64. scanf("%d %d",&a,&b);
  65. printf("%d\n",nr_pal(b)-nr_pal(a-1));
  66. }
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement