Advertisement
a53

nr_pal

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