Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

public class MultiplyStrings {

static String add(String s1, String s2) {

StringBuffer sb = new StringBuffer();

int carrier = 0;

int p1 = s1.length() - 1;

int p2 = s2.length() - 1;

while (p1 >= 0 || p2 >= 0) {

int a = 0;

int b = 0;

if (p1 >= 0) {

a = s1.charAt(p1) - '0';

p1--;

}

if (p2 >= 0) {

b = s2.charAt(p2) - '0';

p2--;

}

sb.append((a + b + carrier) % 10);

carrier = (a + b + carrier) / 10;

}

return sb.reverse().toString();

}

static String mul(String a, int c, int b) {

StringBuffer sb = new StringBuffer();

int carrier = 0;

for (int i = a.length() - 1; i >= 0; i--) {

int t = (a.charAt(i) - '0') * c;

sb.append((t + carrier) % 10);

carrier = (t + carrier) / 10;

}

sb.reverse();

for (int i = 0; i < b; i++)

sb.append(0);

return sb.toString();

}

public static String multiply(String num1, String num2) {

String result = "";

for (int i = 0; i < num2.length(); i++) {

result = add(result,

mul(num1, num2.charAt(num2.length() - 1 - i) - '0', i));

}

return result;

}

public static void main(String[] args) {

String str1 = "123456789";

String str2 = "987654321";

System.out.println("result is"+multiply(str1, str2));

}

}

## No comments:

Post a Comment