#include <iostream>
#include <string>
#include <cmath>
bool hasEqualHalves(long long n) {
// 1. Get length by converting to string or using log10
std::string s = std::to_string(std::abs(n));
int length = s.length();
// 2. Halves can only be equal if length is even
if (length % 2 != 0) return false;
// 3. Calculate divisor using 10^(length/2) + 1
// Example: length 4 -> 10^(2) + 1 = 101
// Example: length 6 -> 10^(3) + 1 = 1001
long long halfLength = length / 2;
long long divisor = std::pow(10, halfLength) + 1;
// 4. Check divisibility
return (n % divisor == 0);
}
int main() {
long long testNumbers[] = {1212, 123123, 45454545, 123, 1213};
for (long long num : testNumbers) {
if (hasEqualHalves(num)) {
std::cout << num << " has equal halves.\n";
} else {
std::cout << num << " does NOT have equal halves.\n";
}
}
}
/*
run:
1212 has equal halves.
123123 has equal halves.
45454545 has equal halves.
123 does NOT have equal halves.
1213 does NOT have equal halves.
*/