LeetCode - 字符串数字相乘与相加

43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理

" class="notranslate">

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理


JAVA


    public static String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")){
            return "0";
        }
        int len1 = num1.length();
        int len2 = num2.length();
        int [] sums = new int[len1 + len2];

        for (int i = len1 - 1; i >= 0; i--) {
            int n1 = num1.charAt(i) - 48;
            for (int j = len2 - 1; j >= 0; j--) {
                int n2 = num2.charAt(j) - 48;
                sums[i + j] += n1 * n2;
                if (sums[i + j] > 9 && (i + j) != 0){
                    sums[i + j - 1] += sums[i + j] / 10;
                    sums[i + j] = sums[i + j] % 10;
                }
            }
        }
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < len1 + len2 - 1; i++){
            builder.append(sums[i]);
        }
        return builder.toString();
    }

415. 字符串相加

给定两个字符串形式的非负整数&nbsp;num1num2&nbsp;,计算它们的和。

注意:

  1. num1num2&nbsp;的长度都小于 5100.
  2. num1num2 都只包含数字&nbsp;0-9.
  3. num1num2 都不包含任何前导零。
  4. 你不能使用任何內建 BigInteger 库,&nbsp;也不能直接将输入的字符串转换为整数形式。

" class="notranslate">

给定两个字符串形式的非负整数 num1num2 ,计算它们的和。

注意:

  1. num1num2 的长度都小于 5100.
  2. num1num2 都只包含数字 0-9.
  3. num1num2 都不包含任何前导零。
  4. 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。


JAVA


    public static String strSum(String num1, String num2){
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        StringBuilder builder = new StringBuilder();
        int carry = 0;
        while (i >= 0 || j >= 0) {
            if (i >= 0) {
                carry += num1.charAt(i) - '0';
            }
            if (j >= 0) {
                carry += num2.charAt(j) - '0';
            }
            builder.append((char)(carry % 10 + '0'));
            carry /= 10;
            i--;
            j--;
        }
        if (carry == 1) {
            builder.append('1');
        }
        return builder.reverse().toString();
    }

原文地址:https://www.cnblogs.com/asche/p/11493482.html

时间: 2024-11-07 18:33:41

LeetCode - 字符串数字相乘与相加的相关文章

js中Number数字相乘后值不对

问题: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005解决方法:网上找到了一些解决办法,就是重新写了一些浮点运算的函数. 下面就把这些

字符串/数字之间类型转换总结

1.char向int转换 方法一:(适用于单个字符) char ch = '6'; int num = ch - '0';   //此时num=6 方法二:(适用于字符串) 函数atoi: int atoi ( const char * str ); 参数是一个char类型的数组,不能是单个char变量 char str[10] = "32352"; int num = atoi(str); 方法三:  sscanf(str,"%d",&a);  其中str

leetcode 字符串分割对称

1 public class Solution { 2 public List<List<String>> partition(String s) { 3 int len=s.length(); 4 boolean dp[][]=new boolean[len][len]; 5 get(dp,s); 6 ArrayList<ArrayList<String>> res=new ArrayList<ArrayList<String>>(

将一串字符串数字转化为整型数字

上篇文章介绍了itoa函数的实现,今天来说说atoi函数,主要思路是:将字符串从头开始读取,跳过最前面的空格以及其他无用字符:遇到正负号,做标记:之后的字符串,遇到数字则转换,遇到其他字符则直接跳出.好了,贴下代码: 1 int atoi(char str[]) 2 { 3 int flag=0; 4 int num=0; 5 int i=0; 6 while(str[i]==' '||str[i]=='\t') //判断字符串开头是否为制表符或者空格 7 { 8 i++; 9 } 10 whi

生成随机字母字符串(数字字母混和)

1.生成随机字母字符串(数字字母混和) /// 生成随机字母字符串(数字字母混和) /// /// 待生成的位数 /// 生成的字母字符串 private string GenerateCheckCode(int codeCount) { int rep = 0; string str = string.Empty; long num2 = DateTime.Now.Ticks + rep; rep++; Random random = new Random(((int)(((ulong)num

AddDigitsTotal - 把数字中单个数相加

给定一个int数字,把数字中的单个数相加起来:得到的结果如果不是个位数,继续相加 如给定 19,执行1+9 = 10 --> 1 + 0 = 1  返回1 给定22,返回4 思路很简单,把各个位置上的数字取出来相加:结果如果大于9,继续执行相加 Java代码实现: 1 public class AddDigitsTotal { 2 public static int addOnce(int n) { 3 int result = 0; 4 while (n != 0) { 5 result +=

【leetcode 字符串处理】Compare Version Numbers

[leetcode 字符串处理]Compare Version Numbers @author:wepon @blog:http://blog.csdn.net/u012162613 1.题目 Compare two version numbers version1 and version1. If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0. You may assume

字符串 数字 列表 元祖 字典 的不同分类and集合的概念

可变不可变 1.可变:列表 字典 2.不可变:字符串 数字 元祖 访问顺序: 1.顺序访问:字符串 列表 元祖 2.映射:字典 3.直接访问:数字 存放元素个数: 容器类型:列表 元祖 字典 原子:数字 字符串 id(变量名)可以查出储存的位置 s={1,2,3,3,9,8,8} print(id(s)) 41383080 集合(set): 1.不同元素组成 2.无序 3.集合中元素必须是不可变类型 例如: s={1,2,3,3,9,8,8} print(type(s)) 输出 <class '

大数字相乘

/** * 大数字相乘 */ public class Test1 { /** * ints * num * @param ints * @param num * @return */ public static int[] mul(int[] ints,int num){ for (int i = 0; i < ints.length; i++) { ints[i] *= num; } for (int i = ints.length-1; i > 0; i--) { ints[i-1] +