Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <map>
- #include <algorithm>
- #include <iostream>
- typedef std::vector<unsigned int> BigNumber;
- std::map<BigNumber, unsigned int> finalNumber;
- bool isLychrel(unsigned int x, unsigned int maxIte) {
- BigNumber number;
- while (x > 0) {
- number.push_back(x % 10);
- x /= 10;
- }
- for (unsigned int ite = 0; ite < maxIte; ite++) {
- auto reverse = number;
- std::reverse(reverse.begin(), reverse.end());
- if (number == reverse) {
- finalNumber[number]++;
- return false;
- }
- auto sum = number;
- unsigned int carry = 0;
- for (size_t digit = 0; digit < number.size(); digit++) {
- sum[digit] += reverse[digit] + carry;
- if (sum[digit] >= 10) {
- sum[digit] -= 10;
- carry = 1;
- } else {
- carry = 0;
- }
- }
- if (carry > 0) {
- sum.push_back(carry);
- }
- number = std::move(sum);
- }
- return true;
- }
- int main() {
- unsigned int ites = 60;
- unsigned int N;
- std::cin >> N;
- unsigned int count = 0;
- for (unsigned int i = 0; i <= N; i++) {
- if (isLychrel(i, ites)) {
- count++;
- }
- }
- unsigned int bestCnt = 0;
- BigNumber bestNum;
- for (auto f : finalNumber) {
- if (bestCnt < f.second) {
- bestCnt = f.second;
- bestNum = f.first;
- }
- }
- std::reverse(bestNum.begin(), bestNum.end());
- for (auto digit : bestNum) {
- std::cout << digit;
- }
- std::cout << " " << bestCnt << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement