Source : https://www.hackerrank.com/challenges/30-interfaces
Objective
Today, we're learning about Interfaces. Check out the Tutorial tab for learning materials and an instructional video!
Task
The AdvancedArithmetic
interface and the method declaration for the abstract divisorSum(n)
method are provided for you in the editor below.
Complete the implementation of Calculator
class, which implements the AdvancedArithmetic
interface. The implementation for the divisorSum(n)
method must return the sum of all divisors of .
Input Format
A single line containing an integer, .
Constraints
Output Format
You are not responsible for printing anything to stdout. The locked template code in the editor below will call your code and print the necessary output.
Sample Input
6
Sample Output
I implemented: AdvancedArithmetic12
Explanation
The integer is evenly divisible by , , , and . Our divisorSum method should return the sum of these numbers, which is . The Solution class then prints on the first line, followed by the sum returned by divisorSum (which is ) on the second line.
Source : https://www.hackerrank.com/challenges/30-interfaces
Solution
// Karthikalapati.blogspot.com | |
import java.io.*; | |
import java.util.*; | |
interface AdvancedArithmetic { | |
int divisorSum(int n); | |
} | |
class Calculator implements AdvancedArithmetic { | |
// Runtime: O(n^(1/2)) | |
// Space Complexity: O(1) | |
public int divisorSum(int n) { | |
int sum = 0; | |
int sqrt = (int) Math.sqrt(n); | |
// Small optimization: if n is odd, we can't have even numbers as divisors | |
int stepSize = (n % 2 == 1) ? 2 : 1; | |
for (int i = 1; i <= sqrt; i += stepSize) { | |
if (n % i == 0) { // if "i" is a divisor | |
sum += i + n/i; // add both divisors | |
} | |
} | |
// If sqrt is a divisor, we should only count it once | |
if (sqrt * sqrt == n) { | |
sum -= sqrt; | |
} | |
return sum; | |
} | |
} | |
class Solution { | |
public static void main(String[] args) { | |
Scanner scan = new Scanner(System.in); | |
int n = scan.nextInt(); | |
scan.close(); | |
AdvancedArithmetic myCalculator = new Calculator(); | |
int sum = myCalculator.divisorSum(n); | |
System.out.println("I implemented: " + myCalculator.getClass().getInterfaces()[0].getName() ); | |
System.out.println(sum); | |
} | |
} |
No comments:
Post a Comment