Given a positive number n. We need to find a number x such that sum of digits of x to itself is equal to n.
If no such x is possible print -1.
Examples:
Input : n = 21 Output : x = 15 Explanation : x + its digit sum = 15 + 1 + 5 = 21 Input : n = 5 Output : -1
We iterate from 1 to n and for each intermediate number, x find its digit sum and then add that to x, if that is equal to n then x will be our required answer.
// iterate from 1 to n. For every no. // check if its digit sum with it is // equal to n. for (int i = 0; i <= n; i++) if (i + digSum(i) == n) return i; return -1;
C++
// CPP program to find x such that x + // digSum(x) is equal to n. #include <bits/stdc++.h> using namespace std;
// utility function for digit sum int digSum( int n)
{ int sum = 0, rem = 0;
while (n) {
rem = n % 10;
sum += rem;
n /= 10;
}
return sum;
} // function for finding x int findX( int n)
{ // iterate from 1 to n. For every no.
// check if its digit sum with it is
// equal to n.
for ( int i = 0; i <= n; i++)
if (i + digSum(i) == n)
return i;
// if no such i found return -1
return -1;
} // driver function int main()
{ int n = 43;
cout << "x = " << findX(n);
return 0;
} |
Java
// Java program to find x such that x + // digSum(x) is equal to n. import java.io.*;
public class GFG
{ // utility function for digit sum
static int digSum( int n)
{
int sum = 0 , rem = 0 ;
while (n> 0 ) {
rem = n % 10 ;
sum += rem;
n /= 10 ;
}
return sum;
}
// function for finding x
static int findX( int n)
{
// iterate from 1 to n. For every no.
// check if its digit sum with it is
// equal to n.
for ( int i = 0 ; i <= n; i++)
if (i + digSum(i) == n)
return i;
// if no such i found return -1
return - 1 ;
}
// Driver code
public static void main (String[] args)
{
int n = 43 ;
System.out.println( "x = " +findX(n));
}
} // This code is contributed by Anant Agarwal. |
Python3
# Python3 program to find # x such that dx + igSum(x) # is equal to n. # utility function # for digit sum def digSum(n):
sum = 0 ;
rem = 0 ;
while (n):
rem = n % 10 ;
sum = sum + rem;
n = int (n / 10 );
return sum ;
# function for finding x def findX(n):
# iterate from 1 to n.
# For every no.
# check if its digit
# sum with it is# equal to n.
for i in range (n + 1 ):
if (i + digSum(i) = = n):
return i;
# if no such i
# found return -1
return - 1 ;
# Driver Code n = 43 ;
print ( "x = " , findX(n));
# This code is contributed by mits |
C#
// C# program to find x such that // x + digSum(x) is equal to n. using System;
class GFG {
// utility function for digit sum
static int digSum( int n)
{
int sum = 0, rem = 0;
while (n > 0)
{
rem = n % 10;
sum += rem;
n /= 10;
}
return sum;
}
// function for finding x
static int findX( int n)
{
// iterate from 1 to n. For every no.
// check if its digit sum with it is
// equal to n.
for ( int i = 0; i <= n; i++)
if (i + digSum(i) == n)
return i;
// if no such i found return -1
return -1;
}
// Driver code
public static void Main()
{
int n = 43;
Console.Write( "x = " + findX(n));
}
} // This code is contributed by vt_m. |
PHP
<?php // PHP program to find x such that // dx + igSum(x) is equal to n. // utility function // for digit sum function digSum( $n )
{ $sum = 0; $rem = 0;
while ( $n )
{
$rem = $n % 10;
$sum += $rem ;
$n /= 10;
}
return $sum ;
} // function for finding x function findX( $n )
{ // iterate from 1 to n.
// For every no.
// check if its digit
// sum with it is
// equal to n.
for ( $i = 0; $i <= $n ; $i ++)
if ( $i + digSum( $i ) == $n )
return $i ;
// if no such i
// found return -1
return -1;
} // Driver Code
$n = 43;
echo "x = " , findX( $n );
// This code is contributed by vt_m. ?> |
Javascript
<script> // Javascript program to find x such that x + // digSum(x) is equal to n. // utility function for digit sum
function digSum(n)
{
let sum = 0, rem = 0;
while (n>0) {
rem = n % 10;
sum += rem;
n = Math.floor(n / 10);
}
return sum;
}
// function for finding x
function findX(n)
{
// iterate from 1 to n. For every no.
// check if its digit sum with it is
// equal to n.
for (let i = 0; i <= n; i++)
if (i + digSum(i) == n)
return i;
// if no such i found return -1
return -1;
}
// driver program let n = 43;
document.write( "x = " +findX(n));
</script> |
Output
x = 35
Time complexity: O(nlogn) for given input number n