From 4d070b56d20c73692d11f2913643ab3b6c070546 Mon Sep 17 00:00:00 2001 From: chayan das Date: Mon, 23 Jun 2025 21:23:26 +0530 Subject: [PATCH] Create 2081. Sum of k-Mirror Numbers --- 2081. Sum of k-Mirror Numbers | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 2081. Sum of k-Mirror Numbers diff --git a/2081. Sum of k-Mirror Numbers b/2081. Sum of k-Mirror Numbers new file mode 100644 index 0000000..8370b31 --- /dev/null +++ b/2081. Sum of k-Mirror Numbers @@ -0,0 +1,53 @@ +class Solution { +public: + long long kMirror(int k, int n) { + long long sum = 0; + + for (int len = 1; n > 0; ++len) { + int halfLen = (len + 1) / 2; + long long start = (len == 1) ? 1 : pow10(halfLen - 1); + long long end = pow10(halfLen); + + for (long long i = start; i < end && n > 0; ++i) { + long long pal = generatePalindrome(i, len % 2 == 1); + if (isPalindromeInBase(pal, k)) { + sum += pal; + n--; + } + } + } + + return sum; + } + + // Generate full decimal palindrome from half (mirrored) + long long generatePalindrome(long long half, bool oddLength) { + long long res = half; + if (oddLength) half /= 10; + while (half > 0) { + res = res * 10 + (half % 10); + half /= 10; + } + return res; + } + + // Check if number is palindrome in base k + bool isPalindromeInBase(long long num, int base) { + vector digits; + while (num > 0) { + digits.push_back(num % base); + num /= base; + } + for (int i = 0, j = digits.size() - 1; i < j; ++i, --j) { + if (digits[i] != digits[j]) return false; + } + return true; + } + + // Avoid pow usage with int return + long long pow10(int exp) { + long long res = 1; + while (exp--) res *= 10; + return res; + } +};