leetcode:43. Multiply Strings 大数相乘

本文介绍了一种不使用BigInteger库或直接转换输入为整数的字符串大数相乘算法。通过从右向左逐位相乘并累加的方式,实现了两个非负整数的乘法运算。算法考虑了输入字符串的长度限制和不含前导零的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

Given two non-negative integers num1 and num2 represented as strings, return the product of num1and num2, also represented as a string.

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"

Note:

  1. The length of both num1 and num2 is < 110.
  2. Both num1 and num2 contain only digits 0-9.
  3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

解题思路:

1.两数相乘后的结果一定一定小于两数的长度之和;

2.计算过程:从右向左,将数2中的每一位的数与数1相乘,最后将结果相加。

计算过程:

Multiplication

可以得到,对于num[i] *num[j](数1中的第i位数字与数2中的第j位数字相乘的结果只会存放在第【i+j】和【i+j+1】这两位上)

同牛客网https://www.nowcoder.com/questionTerminal/0f0badf5f2204a6bb968b0955a82779e

实现:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String num1=sc.next().toString();
        String num2=sc.next().toString();
        String ret=fun(num1,num2);
        System.out.println(ret);
    }
    public static String fun(String num1, String num2) {
		int m=num1.length(),n=num2.length();
		int[] pos=new int[m+n];
		for (int i = m-1; i >=0; i--) {
			for (int j =n-1; j>=0; j--) {
				int mul=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
				int p1=i+j,p2=i+j+1;
				int sum=mul+pos[p2];
				pos[p1]+=sum/10;//高位
				pos[p2]=(sum)%10;//低位
			}
		}
		StringBuilder sb = new StringBuilder();
		for(int p:pos){
			if (!(sb.length() == 0 && p == 0)) {//筛掉首位为0的情况
                sb.append(p);
            }
		}
		return sb.length()==0?"0":sb.toString();
	    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值