Check if the given number is Harshad(Or Niven) Number

Problem Statement: Check if the number is a Harshad(or Niven) number or not.

Examples:

Example 1:
Input: 378
Output: Yes it is a Harshad number.
Explanation: 3+7+8=18. 378 is divisible by 18. Therefore 378 is a harshad number.

Example 2:
Input: 379
Output: No
 it is not a Harshad number.
Explanation: 3+7+9=19. 379 is not divisible by 19. Therefore 379 is a harshad number.

Solution

Disclaimer: Don’t jump directly to the solution, try it out yourself first.

Solution 1:

Intuition: If the sum of digits is divisible by the number then it is called Harshad number.

Approach

  • Maintain a variable sum to store sum of digits of the number.
  • Now check if n is divisible by sum or not.
  • If it is divisible print yes,else print no.

Code:

C++ Code

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n = 378;
	int temp = n;
	int sum = 0;
	while (temp!=0) {
		sum += temp % 10;
		temp /= 10;
	}
	if (n % sum == 0) {
		cout << "YES it is Harshad Number" << "\n";
	}
	else {
		cout << "NO it is not Harshad Number" << "\n";
	}

}

Output:

YES it is Harshad Number

Time Complexity: O(N), where N is the number of digits

Space Complexity: O(1).

Java Code

public class Main {
  public static void main(String args[]) {
    int n = 378;
    int temp = n;
    int sum = 0;
    while (temp != 0) {
      sum += temp % 10;
      temp /= 10;
    }
    if (n % sum == 0) {
      System.out.println("YES it is Harshad Number");
    } else {
      System.out.println("NO it is Harshad Number");
    }

  }
}

Output:

YES it is Harshad Number

Time Complexity: O(N), where N is the number of digits

Space Complexity: O(1).

Solution 2: Using string

Intuition: In solution1 we needed an extra variable temp to store the value of n, but if we use string there won’t be any need for the extra variable.

Approach:

  • Convert the intger to string.
  • Traverse through the string and calculate the sum of all the digits.
  • Now check if the number is divisible by the sum of digits or not.
  • If the number is divisible, print yes, else print no.

Code:

C++ Code

#include<bits/stdc++.h>
using namespace std;
int main()
{   
    int num=378;
	string s = to_string(num);
	int sum = 0;
	for (int i = 0; i < s.length(); i++) {
		sum += s[i] - '0';
	}
	if (num % sum == 0) {
		cout << "YES it is Harshad Number" << "\n";
	}
	else {
		cout << "NO it is not a Harshad Number" << "\n";
	}

}

Output:

YES it is Harshad Number

Time Complexity: O(N), where N is the number of digits

Space Complexity: O(1).

Java Code

public class Main {
  public static void main(String args[]) {
    int num=378;
    String s = Integer.toString(num);
    int sum = 0;
    for (int i = 0; i < s.length(); i++) {
      sum += s.charAt(i) - '0';
    }
    if (num % sum == 0) {
      System.out.print("YES it is a Harshad Number");
    } else {
      System.out.print("NO it is Not a Harshad Number");
    }
  }
}

Output:

YES it is Harshad Number

Time Complexity: O(N), where N is the number of digits

Space Complexity: O(1).

Special thanks to Pranav Padawe for contributing to this article on takeUforward. If you also wish to share your knowledge with the takeUforward fam, please check out this article