title: leetcode-43-字符串相乘(java)
date: 2019-09-10 18:18:03
categories:
- leetcode
tags: - leetcode
字符串相乘(java)
-
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:输入: num1 = “123”, num2 = “456”
输出: “56088”
说明:num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 -
尝试使用大数:我跪下了,使用long double都直接暴毙,因为这个题目的每一个数字的长度都小于110,那么侧面体现了这个数字很大
-
解法:使用小学那种行列式的写法,使用一个超长数组保存数字,后面转字符串进行切割就好了
要点:
- 注意进位放在哪里
class Solution { public String multiply(String num1, String num2) { char[] sum = new char[num1.length()+num2.length()]; for (int k = 0;k<sum.length;k++) sum[k] = '0'; for (int i=num1.length()-1;i>=0;i--){ for (int j=num2.length()-1;j>=0;j--){ int i1 = (num1.charAt(i)-'0')*(num2.charAt(j)-'0'); sum[i+j] = (char)(sum[i+j]-'0'+(sum[i+j+1]-'0'+i1)/10+'0'); sum[i+j+1] =(char) ((sum[i+j+1]-'0'+i1)%10+'0'); } } int j; for (j=0;j<sum.length;j++){ if (sum[j]!='0') return new String(sum).substring(j,sum.length); } return "0"; } }