Advertisement
SvetoslavUzunov

Задача числа

Nov 14th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.      
  6. int main()
  7. {
  8.     long long n;
  9.     cin >> n;
  10.     if (n < 10)
  11.     {
  12.         cout << n;
  13.         return 0;
  14.     }
  15.     vector<int> d;
  16.     while (n > 0)
  17.     {
  18.         d.push_back(n % 10);
  19.         n /= 10;
  20.     }
  21.     reverse(d.begin(), d.end());
  22.     long long answer = 0;
  23.  
  24.     vector<long long> c(d.size());
  25.     c[0] = 1;
  26.     c[1] = 10;
  27.     for (int i = 2; i < (int)c.size(); i++)
  28.     {
  29.         c[i] = 10 * c[i - 2];
  30.     }
  31.     answer += 9;
  32.  
  33.     for (int len = 2; len < (int)d.size(); len++)
  34.     {
  35.         answer += 9 * c[len - 2];
  36.     }
  37.  
  38.     if (d[0] > 1)  answer += (d[0] - 1) * c[d.size() - 2];
  39.  
  40.     for (int i = 1; i < (int)d.size() / 2; i++)
  41.     {
  42.         if (d.size() - i - i - 2 < 0)throw 1;
  43.         answer += d[i] * c[d.size() - i - i - 2];
  44.     }
  45.  
  46.     if (d.size() % 2 == 1)  answer += d[d.size() / 2];
  47.  
  48.     vector<int> r = d;
  49.     for (int i = 0; i < (int)r.size() / 2; i++)   r[r.size() - 1 - i] = r[i];
  50.  
  51.     bool le = true;
  52.     for (int i = 0; i < (int)d.size(); i++)
  53.     {
  54.         if (r[i] < d[i])   break;
  55.         if (r[i] > d[i]) {
  56.             le = false;
  57.             break;
  58.         }
  59.     }
  60.     if (le) answer++;
  61.     cout << answer << endl;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement