文字列(大きな数)の足し算、引き算、掛け算

415.文字列の追加

415.文字列の追加

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        l1 = len(num1)
        l2 = len(num2)
        i1 = l1 - 1
        i2 = l2 - 1
        carry = 0
        base = 10
        ans = ''
        while i1 >= 0 or i2 >= 0 or carry:
            a = int(num1[i1]) if i1 >= 0 else 0
            b = int(num2[i2]) if i2 >= 0 else 0
            sum_ = a + b + carry
            ans = ans + str(sum_ % base)
            carry = sum_ // base
            i1 -= 1
            i2 -= 1
        return ans[::-1]

文字列の減算

文字列の減算は少し面倒です

まず、比較する必要があります。

次に、次のコードがあります。

#include<bits/stdc++.h>

using namespace std;
int a[101], b[101], c[101];

int main(void) {
    
    
    int lena, lenb, lenc;
    string s1, s2;
    cin >> s1 >> s2;
    lena = s1.length();
    lenb = s2.length();

    //将上述字符串以int型数据存入数组
    //因为减法是从个位算起,所以存储时到倒着存
    for (int i = 1; i <= lena; i++) {
    
    
        a[i] = s1[lena - i] - '0';//以数字存储
    }
    for (int j = 1; j <= lenb; j++) {
    
    
        b[j] = s2[lenb - j] - '0';//以数字存储
    }

    //开始模拟减法并将数据存入c数组
    lenc = lena;
    for (int p = 1; p <= lenc; p++) {
    
    
        //同位相减,不够减时
        if (a[p] < b[p]) {
    
    
            a[p + 1]--;//向高位借1
            a[p] += 10;//此时同位加10
        }
        c[p] = a[p] - b[p];
    }
    //处理c数组的前导0
    while (c[lenc] == 0 && lenc > 1)
        lenc--;

    //确定好c数组的位数后,就可以倒序输出了
    for (int q = lenc; q >= 1; q--) {
    
    
        cout << c[q];
    }
    return 0;
}

43.文字列の乗算

43.文字列の乗算

時間計算量:O(n×(n + m))O(n \ times(n + m))O n××n+m

nは2番目の文字列の長さです

class Solution:
    def multiply(self, num1, num2):
        if num1 == '0' or num2 == '0':
            return '0'
        ans = '0'
        l1, l2 = len(num1), len(num2)
        for i in range(l2 - 1, -1, -1):
            add = 0
            y = int(num2[i])
            curr = ['0'] * (l2 - i - 1)
            for j in range(l1 - 1, -1, -1):
                product = int(num1) * y + add
                curr.append(str(product % 10))
                add = product // 10
            while add:
                curr.append(str(add % 10))
                add //= 10
            curr = "".join(curr[::-1])
            ans = self.addString(ans, curr)
        return ans

    def addString(self, s1, s2):
        i = len(s1) - 1
        j = len(s2) - 1
        carry = 0
        ans = []
        while i >= 0 or j >= 0 or carry:
            x = s1[i] if i >= 0 else 0
            y = s2[j] if j >= 0 else 0
            i -= 1
            j -= 1
            sum_ = x + y + carry
            carry = sum_ // 10
            ans.append(str(sum_ % 10))
        return "".join(ans)[::-1]

おすすめ

転載: blog.csdn.net/TQCAI666/article/details/114974583