2024.3.6

一:高精度算法——减法

#include<iostream>
#include<string.h>
#define MAXLEN
#define RMAXLEN
using namespace std;
string s1,s2;
int a[MAXLEN],b[MAXLEN],c[RMAXLEN];
string fun_sub(string s1, string s2)
{
    memset(a, 0, sizeof(int) * MAXLEN);
    memset(b, 0, sizeof(int) * MAXLEN);
    memset(c, 0, sizeof(int) * RMAXLEN);
    bool isNn = false;
    if (s1.length() < s2.length() | s1.length() = s2.length() && s1 < s2) {
        swap(s1, s2);
        isNn = true;
    }
    int len = s1.length();
    for (int i = 0; i < len; i++) {
        a[len - 1 - i] = s1[i] - '0';
    }
    len = s2.length();
    for (int i = 0; i < len; i++) {
        b[len - 1 - i] = s2[i] - '0';
    }
    len = s1.length();
    for (int i = 0; i < len; i++) {
        if (b[i] > a[i]) {
            a[i + 1] -= 1;
            a[i] += 10;
        }
        c[i] = a[i] - b[i];
    }
    while (c[len - 1] == 0 && len > 1)
    {
        len--;
    }
    string ans;
    if (isNn == true) {
        ans = "-";
    }
    for (int i = len - 1; i >= 0; i--) {
        ans += c[i] + '0';
    }
    return ans;
}

int mian() {
    cin >> s1 >> s2;
    string ans = fun_sub(s1, s2);
    cout << ans;
    return 0;
}

二:高精度算法——高精度乘以低精度

#include<iostream>
#include<string.h>
#define MAXLEN
#define RMAXLEN
using namespace std;
string s1;
int a[MAXLEN], b, c[RMAXLEN];
string mul_sub(string s1,int b)
{
    memset(a, 0, sizeof(int) * MAXLEN);
    memset(c, 0, sizeof(int) * RMAXLEN);
    int len = s1.length();
    for (int i = 0; i < len; i++) {
        a[len - 1 - i] = s1[i] - '0';
    }
    for (int i = 0; i < len; i++) {
        c[i] += a[i] * b;
        c[i] %= 10;
    }
    while (c[len] > 0) {
        if (c[len] > 10) {
            c[len + 1] = c[len] / 10;
            c[len] %= 10;
        }
        len++;
    }
    while (c[len - 1] == 0 && len > 1)
    {
        len--;
    }
    string ans;
    for (int i = len - 1; i >= 0; i--) {
        ans += c[i] + '0';
    }
    return ans;
}

int mian() {
    cin >> s1 >> b;
    string ans = fun_mul(s1, b);
    cout << ans;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值