43. 字符串相乘
1.题目描述及示例
-
题目描述
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 -
示例
2.题解思路及代码
-
思路
-
代码
public String multiply(String num1, String num2) {
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
int[] res = new int[num1.length() + num2.length()];
for (int i = num1.length() - 1; i >= 0; i--) {
int n1 = num1.charAt(i) - '0';
for (int j = num2.length() - 1; j >= 0; j--) {
int n2 = num2.charAt(j) - '0';
int sum = (res[i + j + 1] + n1 * n2);
res[i + j + 1] = sum % 10;
res[i + j] += sum / 10;
}
}
StringBuilder result = new StringBuilder();
for (int i = 0; i < res.length; i++) {
if (i == 0 && res[i] == 0) continue;
result.append(res[i]);
}
return result.toString();
}
//这是我的代码,挫
public String multiply(String num1, String num2) {
if (num1.equals("0")||num2.equals("0"))
return "0";
if (num1.length()<num2.length())
{
String temp=num1;
num1=num2;
num2=temp;
}
String up="0";
int move=0;
for (int i=num2.length()-1;i>=0;i--)
{
int tag=0;
StringBuilder stringBuilder=new StringBuilder();
for (int j=num1.length()-1;j>=0;j--)
{
int num=(num1.charAt(j)-'0')*(num2.charAt(i)-'0')+tag;
tag=num/10;
int digit=num%10;
stringBuilder.append(digit);
}
if (tag!=0)
stringBuilder.append(tag);
stringBuilder.reverse();
for(int k=0;k<move;k++)
stringBuilder.append(0);
String down=stringBuilder.toString();
stringBuilder.delete(0,stringBuilder.toString().length());
tag=0;
for (int k=0;k<up.length();k++)
{
int num=(up.charAt(up.length()-k-1)-'0')+(down.charAt(down.length()-k-1)-'0')+tag;
tag=num/10;
int digit=num%10;
stringBuilder.append(digit);
}
for (int k=down.length()-up.length()-1;k>=0;k--)
{
int num=down.charAt(k)-'0'+tag;
tag=num/10;
int digit=num%10;
stringBuilder.append(digit);
}
if (tag!=0)
stringBuilder.append(tag);
up=stringBuilder.reverse().toString();
//System.out.println(up);
move++;
}
return up;
}