Write a recursive function evenDigits that accepts an integer parameter n and returns a new integer containing only the even digits from n, in the same order. If n does not contain any even digits, return 0.
For example, the call of evenDigits(8342116) should return 8426 and the call of evenDigits(35179) should return 0.
Here are my five cents.:)
#include <stdio.h>
int evenDigits( int n )
{
const int Base = 10;
int digit = n % Base;
int even = digit % 2 == 0;
if ( !even ) digit = 0;
return ( n /= Base ) == 0 ? digit
: ( even ? Base : 1 ) * evenDigits( n ) + digit;
}
int main(void)
{
printf( "evenDigits( 8342116 ) = %d\n", evenDigits( 8342116 ) );
printf( "evenDigits( -8342116 ) = %d\n", evenDigits( -8342116 ) );
printf( "evenDigits( 35179 ) = %d\n", evenDigits( 35179 ) );
printf( "evenDigits( -35179 ) = %d\n", evenDigits( -35179 ) );
return 0;
}
The program output is
evenDigits( 8342116 ) = 8426
evenDigits( -8342116 ) = -8426
evenDigits( 35179 ) = 0
evenDigits( -35179 ) = 0