leetcode43.|leetcode43. 字符串相乘
【leetcode43.|leetcode43. 字符串相乘】字符串相乘,通过模拟竖乘的方式,并使用一个数组来记录每一位上的结果
/**
* 字符串相乘(大数相乘)
*/
public class Multiply {
public static String multiply(String num1, String num2) {
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
int length1 = num1.length();
int length2 = num2.length();
StringBuilder str = new StringBuilder();
int[] arrayInt = new int[length1 + length2];
// 就是一个模拟竖乘的过程,对于乘积大于10的数,还会向前进位
for (int i = length1 - 1;
i >= 0;
i--) {
for (int z = length2 - 1;
z >= 0;
z--) {
int number1 = num1.charAt(i) - 48;
int number2 = num2.charAt(z) - 48;
// 向前的总是要进位的
arrayInt[i + z] += number1 * number2;
// 这里确保了当第0位是大于10的时候不会再往前进位,防止出现错误,直接将第0位的用来生成string就可以了
if (arrayInt[i + z] >= 10 && (i + z) != 0) {
// 这里注意先后顺序以及符号,向前的总是要进位的
arrayInt[i + z - 1] += arrayInt[i + z] / 10;
arrayInt[i + z] = arrayInt[i + z] % 10;
}
}
}for (int i = 0;
i <= length1 + length2 - 2;
i++) {
str.append(arrayInt[i]);
}return str.toString();
}public static void main(String[] args) {
String num1 = "999";
String num2 = "99";
System.out.println(multiply(num1, num2));
}
}
推荐阅读
- 一起来学习C语言的字符串转换函数
- 字符串拼接成段落,换行符(\n)如何只执行n-1次
- C语言的版本比较
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JS截取字符串的方法详解
- Python|Python 字符串 子串 回文串
- LeetCode|LeetCode 每日一题 [52] 表示数值的字符串
- Swift|Swift 字符串转数组
- 关于ajax异步分页传输数据到页面为字符串的JS解决办法
- Python实用技法第33篇(字符串连接及合并)