Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream fin("nr_pal.in");
- ofstream fout("nr_pal.out");
- int n, a, b;
- int ncif(int n);
- int POW(int x, int n);
- int ogl(int n);
- int nrpal(int n);
- int main()
- {
- fin >> n;
- for (int i = 1; i <= n; ++i)
- {
- fin >> a >> b;
- fout << nrpal(b) - nrpal(a - 1) << '\n';
- }
- fin.close();
- fout.close();
- return 0;
- }
- int ncif(int n)
- {
- int rez = 0;
- if (n == 0)
- return 1;
- while (n > 0)
- {
- n /= 10;
- ++rez;
- }
- return rez;
- }
- int POW(int x, int n)
- {
- if (n == 0) return 1;
- int p = POW(x, n / 2);
- p *= p;
- if (n & 1)
- p *= x;
- return p;
- }
- int ogl(int n)
- {
- int oglindit = 0;
- while (n > 0)
- {
- oglindit = oglindit * 10 + n % 10;
- n /= 10;
- }
- return oglindit;
- }
- int nrpal(int n)
- {
- int c = ncif(n), npal = 1;
- if (c % 2 == 1)
- {
- npal += 2 * (POW(10, c / 2) - 1);
- int pal = n / POW(10, c / 2) * POW(10, c / 2) + ogl(n / POW(10, c / 2 + 1));
- if (n >= pal)
- npal += n / POW(10, c / 2) - POW(10, c / 2) + 1;
- else npal += n / POW(10, c / 2) - POW(10, c / 2);
- }
- else
- {
- npal += 2 * (POW(10, (c - 1) / 2) - 1) + 9 * POW(10, (c - 1) / 2);
- int pal = n / POW(10, c / 2) * POW(10, c / 2) + ogl(n / POW(10, c / 2));
- if (n >= pal)
- npal += n / POW(10, c / 2) - POW(10, c / 2 - 1) + 1;
- else npal += n / POW(10, c / 2) - POW(10, c / 2 - 1);
- }
- return npal;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement