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:
// 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 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 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# 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 |
<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++ 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 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 |
# 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# 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 |
<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)