Given a number N, the task is to find the sum of digits of a number at even and odd places.
Examples:
Input: N = 54873
Output:
Sum odd = 16
Sum even = 11
Input: N = 457892
Output:
Sum odd = 20
Sum even = 15
Approach:
- First, calculate the reverse of the given number.
- To the reverse number we apply modulus operator and extract its last digit which is actually the first digit of a number so it is odd positioned digit.
- The next digit will be even positioned digit, and we can take the sum in alternating turns.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int reverse( int n)
{
int rev = 0;
while (n != 0) {
rev = (rev * 10) + (n % 10);
n /= 10;
}
return rev;
}
void getSum( int n)
{
n = reverse(n);
int sumOdd = 0, sumEven = 0, c = 1;
while (n != 0) {
if (c % 2 == 0)
sumEven += n % 10;
else
sumOdd += n % 10;
n /= 10;
c++;
}
cout << "Sum odd = " << sumOdd << "\n" ;
cout << "Sum even = " << sumEven;
}
int main()
{
int n = 457892;
getSum(n);
return 0;
}
|
Java
import java.util.*;
class GFG {
static int reverse( int n)
{
int rev = 0 ;
while (n != 0 ) {
rev = (rev * 10 ) + (n % 10 );
n /= 10 ;
}
return rev;
}
static void getSum( int n)
{
n = reverse(n);
int sumOdd = 0 , sumEven = 0 , c = 1 ;
while (n != 0 ) {
if (c % 2 == 0 )
sumEven += n % 10 ;
else
sumOdd += n % 10 ;
n /= 10 ;
c++;
}
System.out.println( "Sum odd = " + sumOdd);
System.out.println( "Sum even = " + sumEven);
}
public static void main(String args[])
{
int n = 457892 ;
getSum(n);
}
}
|
Python3
def reverse(n):
rev = 0
while (n ! = 0 ):
rev = (rev * 10 ) + (n % 10 )
n / / = 10
return rev
def getSum(n):
n = reverse(n)
sumOdd = 0
sumEven = 0
c = 1
while (n ! = 0 ):
if (c % 2 = = 0 ):
sumEven + = n % 10
else :
sumOdd + = n % 10
n / / = 10
c + = 1
print ( "Sum odd =" , sumOdd)
print ( "Sum even =" , sumEven)
n = 457892
getSum(n)
|
C#
using System;
class GFG {
static int reverse( int n)
{
int rev = 0;
while (n != 0) {
rev = (rev * 10) + (n % 10);
n /= 10;
}
return rev;
}
static void getSum( int n)
{
n = reverse(n);
int sumOdd = 0, sumEven = 0, c = 1;
while (n != 0) {
if (c % 2 == 0)
sumEven += n % 10;
else
sumOdd += n % 10;
n /= 10;
c++;
}
Console.WriteLine( "Sum odd = " + sumOdd);
Console.WriteLine( "Sum even = " + sumEven);
}
public static void Main()
{
int n = 457892;
getSum(n);
}
}
|
PHP
<?php
function reverse( $n )
{
$rev = 0;
while ( $n != 0)
{
$rev = ( $rev * 10) + ( $n % 10);
$n = floor ( $n / 10);
}
return $rev ;
}
function getSum( $n )
{
$n = reverse( $n );
$sumOdd = 0; $sumEven = 0; $c = 1;
while ( $n != 0)
{
if ( $c % 2 == 0)
$sumEven += $n % 10;
else
$sumOdd += $n % 10;
$n = floor ( $n / 10);
$c ++;
}
echo "Sum odd = " , $sumOdd , "\n" ;
echo "Sum even = " , $sumEven ;
}
$n = 457892;
getSum( $n );
?>
|
Javascript
<script>
function reverse(n) {
let rev = 0;
while (n != 0) {
rev = (rev * 10) + (n % 10);
n = Math.floor(n / 10);
}
return rev;
}
function getSum(n) {
n = reverse(n);
let sumOdd = 0, sumEven = 0, c = 1;
while (n != 0) {
if (c % 2 == 0)
sumEven += n % 10;
else
sumOdd += n % 10;
n = Math.floor(n / 10);
c++;
}
document.write( "Sum odd = " + sumOdd);
document.write( "<br>" );
document.write( "Sum even = " + sumEven);
}
let n = 457892;
getSum(n);
</script>
|
Output:
Sum odd = 20
Sum even = 15
Time Complexity: O(log10n)
Auxiliary Space: O(1)
Another approach: The problem can be solved without reversing the number. We can extract all the digits from the number one by one from the end. If the original number was odd then the last digit must be odd positioned else it will be even positioned. After processing a digit, we can invert the state from odd to even and vice versa.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void getSum( int n)
{
bool isOdd = (n % 2 == 1) ? true : false ;
int sumOdd = 0, sumEven = 0;
while (n != 0) {
if (isOdd)
sumOdd += n % 10;
else
sumEven += n % 10;
isOdd = !isOdd;
n /= 10;
}
cout << "Sum odd = " << sumOdd << "\n" ;
cout << "Sum even = " << sumEven;
}
int main()
{
int n = 457892;
getSum(n);
return 0;
}
|
Java
class GFG{
static void getSum( int n)
{
boolean isOdd = (n % 2 == 1 ) ? true : false ;
int sumOdd = 0 , sumEven = 0 ;
while (n != 0 )
{
if (isOdd)
sumOdd += n % 10 ;
else
sumEven += n % 10 ;
isOdd = !isOdd;
n /= 10 ;
}
System.out.println( "Sum odd = " + sumOdd);
System.out.println( "Sum even = " + sumEven);
}
public static void main(String[] args)
{
int n = 457892 ;
getSum(n);
}
}
|
Python3
def getSum(n):
if (n % 2 = = 1 ) :
isOdd = True
else :
isOdd = False
sumOdd = 0
sumEven = 0
while (n ! = 0 ) :
if (isOdd):
sumOdd + = n % 10
else :
sumEven + = n % 10
isOdd = not isOdd
n / / = 10
print ( "Sum odd = " , sumOdd )
print ( "Sum even = " ,sumEven)
if __name__ = = "__main__" :
n = 457892
getSum(n)
|
C#
using System;
class GFG{
static void getSum( int n)
{
bool isOdd = (n % 2 == 1) ? true : false ;
int sumOdd = 0, sumEven = 0;
while (n != 0)
{
if (isOdd)
sumOdd += n % 10;
else
sumEven += n % 10;
isOdd = !isOdd;
n /= 10;
}
Console.WriteLine( "Sum odd = " + sumOdd);
Console.Write( "Sum even = " + sumEven);
}
static public void Main ()
{
int n = 457892;
getSum(n);
}
}
|
Javascript
<script>
function getSum(n)
{
let isOdd = (n % 2 == 1) ? true : false ;
let sumOdd = 0, sumEven = 0;
while (n != 0) {
if (isOdd)
sumOdd += n % 10;
else
sumEven += n % 10;
isOdd = !isOdd;
n = Math.floor(n/10);
}
document.write( "Sum odd = " + sumOdd + "<br>" );
document.write( "Sum even = " + sumEven);
}
let n = 457892;
getSum(n);
</script>
|
Output:
Sum odd = 20
Sum even = 15
Time Complexity: O(log10n) as while loop would run for log10n times
Auxiliary Space: O(1)
Method #3:Using string() method:
- Convert the integer to string. Traverse the string and store all even indices sum in one variable and all odd indices sum in another variable.
Below is the implementation:
C++
#include <bits/stdc++.h>
using namespace std;
void getSum( int n)
{
int sumOdd = 0, sumEven = 0;
string num = to_string(n);
for ( int i = 0; i < num.size(); i++)
{
if (i % 2 == 0)
sumOdd = sumOdd + ( int (num[i]) - 48);
else
sumEven = sumEven + ( int (num[i]) - 48);
}
cout << "Sum odd = " << sumOdd << "\n" ;
cout << "Sum even = " << sumEven << "\n" ;
}
int main()
{
int n = 457892;
getSum(n);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void getSum( int n)
{
int sumOdd = 0 ;
int sumEven = 0 ;
String num = String.valueOf(n);
for ( int i = 0 ; i < num.length(); i++)
if (i % 2 == 0 )
sumOdd = sumOdd + (num.charAt(i) - '0' );
else
sumEven = sumEven + (num.charAt(i) - '0' );
System.out.println( "Sum odd = " + sumOdd);
System.out.println( "Sum even = " + sumEven);
}
public static void main(String[] args)
{
int n = 457892 ;
getSum(n);
}
}
|
Python3
def getSum(n):
sumOdd = 0
sumEven = 0
num = str (n)
for i in range ( len (num)):
if (i % 2 = = 0 ):
sumOdd = sumOdd + int (num[i])
else :
sumEven = sumEven + int (num[i])
print ( "Sum odd = " , sumOdd)
print ( "Sum even = " , sumEven)
if __name__ = = "__main__" :
n = 457892
getSum(n)
|
C#
using System;
class GFG{
static void getSum( int n)
{
int sumOdd = 0;
int sumEven = 0;
String num = n.ToString();
for ( int i = 0; i < num.Length; i++)
if (i % 2 == 0)
sumOdd = sumOdd + (num[i] - '0' );
else
sumEven = sumEven + (num[i] - '0' );
Console.WriteLine( "Sum odd = " + sumOdd);
Console.WriteLine( "Sum even = " + sumEven);
}
public static void Main()
{
int n = 457892;
getSum(n);
}
}
|
Javascript
<script>
function getSum(n)
{
let sumOdd = 0;
let sumEven = 0;
let num = (n).toString();
for (let i = 0; i < num.length; i++)
if (i % 2 == 0)
sumOdd = sumOdd + (num[i] - '0' );
else
sumEven = sumEven + (num[i] - '0' );
document.write( "Sum odd = " + sumOdd+ "<br>" );
document.write( "Sum even = " + sumEven+ "<br>" );
}
let n = 457892;
getSum(n);
</script>
|
Output
Sum odd = 20
Sum even = 15
Time Complexity: O(log10n), as the length of the string will be log10n.
Auxiliary Space: O(log10n)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
10 Oct, 2022
Like Article
Save Article