The Harshad or Niven numbers are positive integers >= 1 that are divisible by the sum of their digits.

For example, 42 is a Harshad number as 42 is divisible by (4+2) without remainder. Assume that the series is defined as the numbers in increasing order.

The task is to create a function/method/procedure to generate successive members of the Harshad sequence. Use it to list the first twenty members of the sequence and list the first Harshad number greater than 1000.

#include <vector>
#include <iostream>
int sumDigits ( int number ) {
int sum = 0 ;
while ( number != 0 ) {
sum += number % 10 ;
number /= 10 ;
}
return sum ;
}
bool isHarshad ( int number ) {
return number % ( sumDigits ( number ) ) == 0 ;
}
int main( ) {
std::vector<int> harshads ;
int i = 0 ;
while ( harshads.size( ) != 20 ) {
i++ ;
if ( isHarshad ( i ) )
harshads.push_back( i ) ;
}
std::cout << "The first 20 Harshad numbers:\n" ;
for ( int number : harshads )
std::cout << number << " " ;
std::cout << std::endl ;
int start = 1001 ;
while ( ! ( isHarshad ( start ) ) )
start++ ;
std::cout << "The smallest Harshad number greater than 1000 : " << start << '\n' ;
return 0 ;
}

The first 20 Harshad numbers:
1 2 3 4 5 6 7 8 9 10 12 18 20 21 24 27 30 36 40 42
The smallest Harshad number greater than 1000 : 1002

SOURCE

Content is available under GNU Free Documentation License 1.2.

*Related*