zoukankan      html  css  js  c++  java
  • #leetcode刷题之路43-字符串相乘

    给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    string multiply(string num1, string num2) {
        int l1=num1.length();
        int l2=num2.length();
        int i;
        string ans;
        if(l1 == 0 || l2 == 0) return "";
        if(num1 == "0" || num2 == "0") return "0";
        int *t = new int[l1+l2];
        //memset(t,0, (l1+l2)* sizeof(int));
        fill(t,t+l1+l2,0);
        for(i = l1-1; i >=0; i--) {//从个位向前
            for(int j =l2-1; j >=0; j--) {//从个位向前
                int multi = (num1[i]-'0') * (num2[j]-'0');//存对应的数字相乘的结果
                multi += t[i+j+1];//先把这一次的值加上之前的最后一位,看会不会进位
                t[i+j] += multi/10;
                t[i+j+1] = multi % 10;
            }
        }
        i = 0;
        while(i < l1+l2 && t[i] == 0)
            i++;//找到非零数的位置
        for(; i < l1+l2; i++)
            ans+=to_string(t[i]);
        return ans;
    }
    
    int main() {
        string s1="123";
        string s2="456";
        string ans=multiply(s1,s2);
        std::cout << ans << std::endl;
        return 0;
    }
  • 相关阅读:
    C++17 filesystem文件系统
    简易版本vue的实现
    javaSE基础04
    javaSE基础03
    javaSE基础02
    JavaSE基础01
    Document对象和window对象
    进程和子进程及端口的常用命令
    vue分页组件二次封装---每页请求特定数据
    css图片垂直水平居中及放大(实现水平垂直居中的效果有哪些方法?)
  • 原文地址:https://www.cnblogs.com/biat/p/10611956.html
Copyright © 2011-2022 走看看