The C++ Program: odometer.cpp

  1 #include <iostream>
  2 #include <cstdlib>
  3 #include <string>
  4 using namespace std;
  5 
  6 string getPalindrome(string origNum, int numDigits)
  7 {
  8     string pal = origNum;
  9     for (int i = 0; i < numDigits; i++)
 10     {
 11         int index = numDigits - 1 - i;
 12         pal += origNum[index];
 13     }
 14     return pal;
 15 }
 16 
 17 string addOne(string origNum)
 18 {
 19        string num = origNum;
 20        int index = num.length() - 1;
 21        while (num[index] == '9')
 22        {
 23              num[index] = '0';
 24              index--;
 25        }
 26        num[index] = (char)(num[index] + 1);
 27        return num;
 28 }
 29 
 30 int main()
 31 {
 32     string str;
 33     cin >> str;
 34     while (str != "0")
 35     {
 36           int numDigits = str.length();
 37           long long origNum = atol(str.c_str());
 38           
 39           string palStr = str.substr(0, (numDigits + 1)/2);
 40           string pal = getPalindrome(palStr, numDigits / 2);
 41           
 42           if (atol(pal.c_str()) < origNum)
 43           {
 44              palStr = addOne(palStr);
 45              pal = getPalindrome(palStr, numDigits / 2);
 46           }
 47           
 48           cout << (atol(pal.c_str()) - origNum) << endl;
 49           cin >> str;
 50     }
 51 }
 52 
 53