leetCode_Multiply Strings(大位数相乘)

题意:两个大位数的乘法(用String实现)

思路:很简单,模拟人的乘法即可。这道题印象很深刻,因为我小学最初学编程,学到最后就是这个题。但是我当时太不踏实了,就没静下心来学。等到本科想编这道题,发现能力水平不够,心不够静。等到研究生编这道题的时候,越来越快,今天连写代码加调试到最后正确也就是35分钟的时间。题并不难,对于我来说,是一道很有纪念意义的题。Medium还有23题,加油~

public class Solution {
	public String multiply(String num1, String num2) {
		StringBuffer ans = new StringBuffer();
		ArrayList<StringBuffer> tempResult = new ArrayList<>();
		ArrayList<StringBuffer> num1Result = new ArrayList<>();
		int i, j, maxLength = 0;
		int jinwei, tempSum;
		// calculate num1*0...num1*9
		for (i = 0; i <= 9; i++) {
			StringBuffer temp = new StringBuffer();
			jinwei = tempSum = 0;
			for (j = num1.length() - 1; j >= 0; j--) {
				tempSum = jinwei + (num1.charAt(j) - '0') * i;
				jinwei = tempSum / 10;
				temp.append(tempSum % 10);
			}
			if(jinwei!=0) temp.append(jinwei);
			num1Result.add(temp);
		}
		// calculate num1*num2 by bits;
		for (i = num2.length() - 1; i >= 0; i--) {
			StringBuffer t = num1Result.get(num2.charAt(i) - '0');
			StringBuffer zeros = new StringBuffer();
			for (j = 0; j < num2.length() - 1 - i; j++)
				zeros.append("0");
			zeros.append(t);
			maxLength = Math.max(maxLength, zeros.length());
			tempResult.add(zeros);
		}
		// add all result
		jinwei = tempSum = 0;
		for (i = 0; i < maxLength; i++) {
			tempSum=0;
			for (j = 0; j < num2.length(); j++) {
				if (i < tempResult.get(j).length()) {
					tempSum = tempSum + (tempResult.get(j).charAt(i) - '0');	
				}
			}
			tempSum = tempSum + jinwei;
			ans.append(tempSum % 10);
			jinwei = tempSum / 10;
		}
		while(jinwei>0)
		{
			ans.append(jinwei%10);
			jinwei=jinwei/10;
		}
		ans=ans.reverse();
		for(i=0;i<ans.length()-1&&ans.charAt(i)=='0';i++);
		return ans.substring(i).toString();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值