• #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;
    }
  • 相关阅读:
    ACCP7.0-S2-复习自测-15测试分析
    线程
    多线程下的单例模式
    combobox 属性、事件、方法
    java的多线程总结
    爬虫--登录网页
    shell--字符串是否为空
    python--正则表达式 字符串匹配
    mysql---表所在数据库
    python--日期操作
  • 原文地址:https://www.cnblogs.com/biat/p/10611956.html
Copyright © 2020-2023  润新知