Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Vlad Tir, Colegiul National "Tudor Vladimirescu", Targu-Jiu
- #include <cstdio>
- int nr_cifre(int n) /// Calculeaza numarul de cifre ale lui n
- {
- int nr=0;
- if(n==0)
- return 1;
- while(n>0)
- ++nr,n/=10;
- return nr;
- }
- int putere(int a,int b) /// Calculeaza a^b
- {
- int p=1;
- for(int i=1;i<=b;++i)
- p*=a;
- return p;
- }
- int inversul(int n) /// Calculeaza inversul lui n
- {
- int invers=0;
- while(n>0)
- invers=invers*10+n%10,n/=10;
- return invers;
- }
- int nr_pal(int n)
- {
- if(n==-1)
- return 0;
- int c=nr_cifre(n),nr_de_pal=1;
- if(c%2==1) /// Daca n are numar impar de cifre
- {
- nr_de_pal+=2*(putere(10,c/2)-1);
- 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
- if(n>=pal) /// Daca n este mai mare decat pal,
- nr_de_pal+=n/putere(10,c/2)-putere(10,c/2)+1; /// avem o solutie in plus
- else
- nr_de_pal+=n/putere(10,c/2)-putere(10,c/2);
- }
- else /// altfel (adica n are numar par de cifre)
- {
- nr_de_pal+=2*(putere(10,(c-1)/2)-1)+9*putere(10,(c-1)/2);
- 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
- if(n>=pal) /// Daca n este mai mare decat pal,
- nr_de_pal+=n/putere(10,c/2)-putere(10,c/2-1)+1; /// avem o solutie in plus
- else
- nr_de_pal+=n/putere(10,c/2)-putere(10,c/2-1);
- }
- return nr_de_pal;
- }
- int main()
- {
- int n;
- freopen("nr_pal.in","r",stdin);
- freopen("nr_pal.out","w",stdout);
- scanf("%d",&n);
- for(int i=1;i<=n;++i)
- {
- int a,b;
- scanf("%d %d",&a,&b);
- printf("%d\n",nr_pal(b)-nr_pal(a-1));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement