Given a number N. The task is to find the sum of all N-digit palindromes.
Examples:
Input: N = 2 Output: 495 Explanation: 11 + 22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 = 495 Input: N = 7 Output: 49500000000
Naive Approach:
Run a loop from 10^(n-1) to 10^(n) – 1 and check when the current number is palindrome or not. If it adds its value to the answer.
Below is the implementation of the above approach:
CPP
// C++ program for the // above approach #include <bits/stdc++.h> using namespace std; // Function to check // palindrome bool isPalindrome(string& s) { int left = 0, right = s.size() - 1; while (left <= right) { if (s[left] != s[right]) { return false ; } left++; right--; } return true ; } // Function to calculate // the sum of n-digit // palindrome long long getSum( int n) { int start = pow (10, n - 1); int end = pow (10, n) - 1; long long sum = 0; // Run a loop to check // all possible palindrome for ( int i = start; i <= end; i++) { string s = to_string(i); // If palindrome // append sum if (isPalindrome(s)) { sum += i; } } return sum; } // Driver code int main() { int n = 1; long long ans = getSum(n); cout << ans << '\n' ; return 0; } |
Java
// Java program for the // above approach import java.util.*; class GFG { // Function to check // palindrome static boolean isPalindrome(String s) { int left = 0 , right = s.length() - 1 ; while (left <= right) { if (s.charAt(left) != s.charAt(right)) { return false ; } left++; right--; } return true ; } // Function to calculate // the sum of n-digit // palindrome static long getSum( int n) { int start = ( int ) Math.pow( 10 , n - 1 ); int end = ( int ) (Math.pow( 10 , n) - 1 ); long sum = 0 ; // Run a loop to check // all possible palindrome for ( int i = start; i <= end; i++) { String s = String.valueOf(i); // If palindrome // append sum if (isPalindrome(s)) { sum += i; } } return sum; } // Driver code public static void main(String[] args) { int n = 1 ; long ans = getSum(n); System.out.print(ans); } } // This code is contributed by 29AjayKumar |
Python
# Python program for the above approach import math # Function to check # palindrome def isPalindrome(s): left = 0 right = len (s) - 1 while (left < = right): if (s[left] ! = s[right]): return False left = left + 1 right = right - 1 return True # Function to calculate # the sum of n-digit # palindrome def getSum(n): start = int (math. pow ( 10 , n - 1 )) end = int (math. pow ( 10 , n)) - 1 sum = 0 # Run a loop to check # all possible palindrome for i in range (start, end + 1 ): s = str (i) # If palindrome # append sum if (isPalindrome(s)): sum = sum + i return sum # Driver code n = 1 ans = getSum(n) print (ans) # This code is contributed by Sanjit_Prasad |
C#
// C# program for the above approach using System; class GFG { // Function to check // palindrome static bool isPalindrome( string s) { int left = 0, right = s.Length - 1; while (left <= right) { if (s[left] != s[right]) { return false ; } left++; right--; } return true ; } // Function to calculate // the sum of n-digit // palindrome static long getSum( int n) { int start = ( int ) Math.Pow(10, n - 1); int end = ( int ) (Math.Pow(10, n) - 1); long sum = 0; // Run a loop to check // all possible palindrome for ( int i = start; i <= end; i++) { string s = i.ToString();; // If palindrome // append sum if (isPalindrome(s)) { sum += i; } } return sum; } // Driver code public static void Main() { int n = 1; long ans = getSum(n); Console.Write(ans); } } // This code is contributed by AnkitRai01 |
Javascript
<script> // JavaScript program for the // above approach // Function to check // palindrome function isPalindrome(s) { var left = 0, right = s.length - 1; while (left <= right) { if (s[left] != s[right]) { return false ; } left++; right--; } return true ; } // Function to calculate // the sum of n-digit // palindrome function getSum(n) { var start = Math.pow(10, n - 1); var end = Math.pow(10, n) - 1; var sum = 0; // Run a loop to check // all possible palindrome for ( var i = start; i <= end; i++) { var s = (i.toString()); // If palindrome // append sum if (isPalindrome(s)) { sum += i; } } return sum; } // Driver code var n = 1; var ans = getSum(n); document.write( ans + "<br>" ); </script> |
45
Time Complexity: O(n*log(n))
Auxiliary Space: O(1)
Efficient approach:
On carefully observing the sum of n digit palindrome a series is formed i.e 45, 495, 49500, 495000, 49500000, 495000000. Therefore, by deducing this to a mathematical formula, we get for n = 1 sum = 45 and for n > 1 put sum = (99/2)*10^n-1*10^(n-1)/2
Below is the implementation of the above approach:
C++
// C++ program for // the above approach #include <bits/stdc++.h> using namespace std; // Function to calculate // sum of n digit number long double getSum( int n) { long double sum = 0; // Corner case if (n == 1) { sum = 45.0; } // Using above approach else { sum = (99.0 / 2.0) * pow (10, n - 1) * pow (10, (n - 1) / 2); } return sum; } // Driver code int main() { int n = 3; long double ans = getSum(n); cout << setprecision(12) << ans << '\n' ; return 0; } |
Java
// Java program for // the above approach class GFG { // Function to calculate // sum of n digit number static double getSum( int n) { double sum = 0 ; // Corner case if (n == 1 ) { sum = 45.0 ; } // Using above approach else { sum = ( 99.0 / 2.0 ) * Math.pow( 10 , n - 1 ) * Math.pow( 10 , (n - 1 ) / 2 ); } return sum; } // Driver code public static void main(String[] args) { int n = 3 ; double ans = getSum(n); System.out.print(ans); } } // This code is contributed by PrinciRaj1992 |
Python3
# Python program for # the above approach # Function to calculate # sum of n digit number def getSum(n): sum = 0 ; # Corner case if (n = = 1 ): sum = 45.0 ; # Using above approach else : sum = ( 99.0 / 2.0 ) * pow ( 10 , n - 1 )\ * pow ( 10 , (n - 1 ) / 2 ); return sum ; # Driver code if __name__ = = '__main__' : n = 3 ; ans = int (getSum(n)); print (ans); # This code is contributed by 29AjayKumar |
C#
// C# program for // the above approach using System; class GFG { // Function to calculate // sum of n digit number static double getSum( int n) { double sum = 0; // Corner case if (n == 1) { sum = 45.0; } // Using above approach else { sum = (99.0 / 2.0) * Math.Pow(10, n - 1) * Math.Pow(10, (n - 1) / 2); } return sum; } // Driver code public static void Main(String[] args) { int n = 3; double ans = getSum(n); Console.Write(ans); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript program for // the above approach // Function to calculate // sum of n digit number function getSum(n) { var sum = 0; // Corner case if (n == 1) { sum = 45.0; } // Using above approach else { sum = (99.0 / 2.0) * Math.pow(10, n - 1) * Math.pow(10, parseInt((n - 1) / 2)); } return sum; } // Driver code var n = 3; var ans = getSum(n); document.write(ans + "<br>" ); </script> |
49500
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!