1、描述

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

例1:

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

      输出:"6"

例2:

      输入:num1 = "123", num = "456"

      输出:"56088"

说明:

1、num1 和 num2 的长度小于110

2、num1 和 num2 只包含数字 0-9

3、num1 和 num2 均不以零开头,除非是数字0本身

4、不能使用任何标准库的大数类型(比如 bigInteger)或直接将输入转换为整数来处理

 

2、算法

模拟乘法,首先要进行字符串翻转,让低位在前面,方便处理进位

func multiply(_ num1: String, _ num2: String) -> String {
        
        if num1=="0" || num2=="0" {
            return "0"
        }
        
        var res : [Int] = [Int].init(repeating: 0, count: num1.count+num2.count)
        
        var num1Arr : [Int] = stringToArr(num1)
        var num2Arr : [Int] = stringToArr(num2)
        print(num1Arr)
        print(num2Arr)
        
        //遍历数组
        for i in 0..<num1Arr.count {
            for j in 0..<num2Arr.count{
                //记录两两相乘的结果
                res[i+j] += num1Arr[i]*num2Arr[j]
            }
        }
        //进位值
        var carrys = 0
        //将两两相乘的结果遍历
        for i in 0..<res.count {
            res[i] += carrys
            carrys = res[i]/10
            res[i] %= 10
        }
        if carrys != 0 {
            res[res.count-1] = carrys
        }
        //结果值正序
        res = res.reversed()
        
        var str : String = ""
        var i = res[0]==0 ? 1 : 0
        for _ in i..<res.count {
            str += String(res[i])
            
            i += 1
        }
        
        return str
        
    }
    
    //将字符串转换成数组并反转顺序
    private func stringToArr(_ str : String)->[Int]{
        var result : [Int] = []
        for i in str{
            result.append(stringToInt(String(i)))
        }
        //字符数组倒序存储
        result = result.reversed()
        return result
    }
    
    //字符利用ascii转换为整数值
    private func stringToInt(_ char : String)->Int{
        var result : Int = 0
        var result1 : Int = 0
        
        for characterInt in char.unicodeScalars {
            result = Int(characterInt.value)
        }
        for characterInt in "0".unicodeScalars {
            result1 = Int(characterInt.value)
        }
//        print(result-result1)
        return result-result1
    }


调用:
        print(multiply("2", "3"))
        print(multiply("123", "456"))

运行结果:

[2]
[3]
6

[3, 2, 1]
[6, 5, 4]
56088