diff --git a/math/magic_number.cpp b/math/magic_number.cpp new file mode 100644 index 000000000..4a6edac4f --- /dev/null +++ b/math/magic_number.cpp @@ -0,0 +1,67 @@ +/** + * @file magic_number.cpp + * @brief A simple program to check if the given number is a magic number or not. + * A number is said to be a magic number, if the sum of its digits are calculated + * till a single digit recursively by adding the sum of the digits after every addition. + * If the single digit comes out to be 1,then the number is a magic number. + * @detail This is a shortcut method to verify Magic Number. + * On dividing the input by 9, if the remainder is 1 then the number is a magic number else not. + * The divisibility rule of 9 says that a number is divisible by 9 if the sum of its digits + * are also divisible by 9. Therefore, if a number is divisible by 9, then, recursively, + * all the digit sums are also divisible by 9. The final digit sum is always 9. + * An increase of 1 in the original number will increase the ultimate value by 1, + * making it 10 and the ultimate sum will be 1, thus verifying that it is a magic number. + * @author [Neha Hasija](https://github.com/neha-hasija17) + */ +#include +#include + +/** + * Function to check if the given number is magic number or not. + * @param n number to be checked. + * @return if number is a magic number, returns true, else false. + */ + +bool magic_number(int n) { + if (n <= 0) { + return false; + } + // result stores the modulus of @param n with 9 + int result=n%9; + //if result is 1 then the number is a magic number else not + if(result==1) return true; + else return false; +} + +/** Test function + * @returns void + */ +void tests() { + std::cout << "Test 1:\t n=60\n"; + assert(magic_number(60) == false); + std::cout << "passed\n"; + + std::cout << "Test 2:\t n=730\n"; + assert(magic_number(730) == true); + std::cout << "passed\n"; + + std::cout << "Test 3:\t n=0\n"; + assert(magic_number(0) == false); + std::cout << "passed\n"; + + std::cout << "Test 4:\t n=479001600\n"; + assert(magic_number(479001600) == false); + std::cout << "passed\n"; + + std::cout << "Test 5:\t n=-35\n"; + assert(magic_number(-35) == false); + std::cout << "passed\n"; +} + +/** Main function + * @returns 0 on exit + */ +int main() { + tests(); + return 0; +}