简单的高精度除以高精度

时间限制: 1000 ms 内存 u限制: 65536 KB
提交数: 14176 通过数: 6917
【题目描述】
高精除以高精,求它们的商和余数。

【输入】
输入两个低于300位的正整数。

【输出】
输出商和余数。

【输入样例】
1231312318457577687897987642324567864324567876543245671425346756786867867867
1231312318767141738178325678412414124141425346756786867867867
【输出样例】
999999999748590
179780909068307566598992807564736854549985603543237528310337

#include<iostream>
using namespace std;
string s1, s2;
int a[301], b[301], c[301], tmp[301];
int la, lb, lc, lt;//定义长度在外面
void reverseStrtoInt(string src, int* des) {
    for (int i = 0; i < src.size(); i++) {
        des[src.size() - i] = src[i] - '0';
    }
}

int move(int B[], int TMP[], int LB, int I) {
    for (int i = 1; i <= LB; i++) {
        TMP[i + I] = B[i];
    }
    return LB + I;
}

int mycmp(int A[], int TMP[], int LA, int LT) {
    if (LA > LT) {
        return 1;
    }
    else if (LA < LT) {//if
        return -1;
    }
    else {//无else
        for (int i = LA; i >= 1; i--) {
            if (A[i] > TMP[i]) {
                return 1;
            }
            if (A[i] < TMP[i]) {
                return -1;
            }
        }
    }
    return 0;
}

void sub(int A[], int TMP[], int& LA,int LT) {//记得传引用
    for (int i = 1; i <= LT; i++) {
        if (A[i] < TMP[i]) {
            A[i + 1]--;
            A[i] += 10;
        }
        A[i] = A[i] - TMP[i];
    }
    while (A[LA] == 0 && LA > 1) LA--;
}

int main() {
    cin >> s1 >> s2;
    if (s2[0] == '0') {
        return 0;
    }
    la = s1.size(),lb=s2.size();
    lc = la - lb + 1;
    reverseStrtoInt(s1, a);
    reverseStrtoInt(s2, b);

    for (int i = lc; i >= 1; i--) {
        lt = move(b, tmp, lb, i - 1);//位移除数
        while (mycmp(a, tmp, la, lt) >= 0) {//比较a和tmp数组谁大,这样才能减
            c[i]++;
            sub(a, tmp, la, lt);//如果可以减就调用减法
        }
        //la--;错
    }

    while (c[lc] == 0 && lc > 1) lc--;
    for (int i = lc; i >= 1; i--) {
        cout << c[i];
    }
    cout << endl;
    for (int i = la; i >= 1; i--) {
        cout << a[i];//余下来就是减完之后的余数
    }
    return 0;
}

简单的高精度除以高精度

文章链接: https://www.mfisp.com/13160.html

文章标题:简单的高精度除以高精度

文章版权:梦飞科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
建站教程投稿分享

使用indexOf方法判断Email邮箱是否合法

2022-11-24 23:31:25

建站教程投稿分享

DataFrame

2022-11-24 23:39:12

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

梦飞科技 - 最新云主机促销服务器租用优惠