Multiply two non-negative integer strings [with a twist]

Given two non-negative integers n1 and n2 represented as strings, return the product of n1 and n2, also represented as a string. Twist: You can’t use any built-in language integer libraries nor convert the inputs to integers directly.

My solution to this week's interview question from cassidoo's weekly newsletter.

Question:

Given two non-negative integers n1 and n2 represented as strings, return the product of n1 and n2, also represented as a string. Twist: You can’t use any built-in language integer libraries nor convert the inputs to integers directly.

Example:

$ stringProduct("123", "456")
$ "56088"

Solution:

public static int productOfTwoStrings(String s1, String s2) {
    int n1 = 0;
    for(int i=s1.length()-1; i>=0; i--) {
      int n = s1.charAt(i)-48;
      n1 = n1+ (n * ((int) Math.pow(10, s1.length()-i-1)));
    }
    int n2 = 0;
    for(int i=s2.length()-1; i>=0; i--) {
      int n = s2.charAt(i)-48;
      n2 = n2+ (n * ((int) Math.pow(10, s2.length()-i-1)));
    }

    return n1*n2;
  }

Time complexity: O(n) where n is the length of the longest string in the input.

(an interactive replit is available at the end of the post and you can run the code from there!)

Explanation:

charAt() gives us the character representation of a character at a given index. For example, if we have the String s1="123", s1.charAt(0) will give us '1'.  Notice the single  quotes representing a character type.

Given the ASCII character table, we can see the the character representing the number '0' has a value of 48.  

So, doing '0' - 48 would give us the integer value 0.

If we start traversing the string inputs from the end to the beginning, we need to multiply the integer value that we calculated by a power of 10 to make sure our resulting total integer is correct.

Interactive Replit:

Subscribe to Faisal.Software

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe