加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

模拟大数运算

发布时间:2021-03-06 10:37:12 所属栏目:大数据 来源:网络整理
导读:1.大数乘法 void multify( const char * a, const char * b){ assert(a != NULLb != NULL); int lena = strlen (a); int lenb = strlen (b); vector int sum(lena + lenb, 0 ); for ( int i = 0 ; i lena; i++){ for ( int j = 0 ; j lenb; j++){ sum[i + j

1.大数乘法

void multify(const char* a,const char* b){
    assert(a != NULL&&b != NULL);

    int lena = strlen(a);
    int lenb = strlen(b);

    vector<int> sum(lena + lenb,0);

    for (int i = 0; i < lena; i++){
        for (int j = 0; j < lenb; j++){
            sum[i + j + 1] += (a[i] - '0') * (b[j] - '0');
        }
    }

    for (int i = lena + lenb - 1; i >= 0; i--){
        if (sum[i] >= 10){
            sum[i - 1] += sum[i] / 10;
            sum[i] %= 10;
        }
    }

    int i = 0;
    while (sum[i] == 0) i++;

    for (; i < lena + lenb; i++){
        cout << sum[i];
    }
    cout << endl;
}

2.大数加法

void add(const char* a,const char* b){
    assert(a != NULL&&b != NULL);

    int lena = strlen(a);
    int lenb = strlen(b);

    vector<int> sum(max(lena,lenb)+1,0);

    int i = lena-1,j = lenb-1;
    int k = 0;
    for (; i >=0 && j >=0; i--,j--){
        sum[k]=(a[i] - '0') + (b[j] - '0');
        k++;
    }

    while (i >=0){
        sum[k]=a[i] - '0';
        i--;
        k++;
    }

    while (j >=0){
        sum[k]= b[j] - '0';
        j--;
        k++;
    }

    int len = sum.size()-1;
    if (sum[len] == 0) len--;

    for (i = 0; i <= len; i++){
        if (sum[i]>=10){
            sum[i + 1] += sum[i] / 10;
            sum[i] %= 10;
        }
    }

    if (sum[len+1] > 0) len++;

    for (i = len; i >= 0; i--)
        cout << sum[i];
    cout << endl;
}

比如杭电 1002 A + B Problem II

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;

char a[1002];
char b[1002];


int main(){

    int T;

    //freopen("test.txt","r",stdin);

    scanf("%d",&T);

    for (int t = 1; t <= T;t++){
        scanf("%s %s",&a,&b);

        int lena = strlen(a);
        int lenb = strlen(b);

        vector<int> sum(max(lena,lenb) + 1,0);

        int i = lena - 1,j = lenb - 1;
        int k = 0;
        for (; i >= 0 && j >= 0; i--,j--){
            sum[k] = (a[i] - '0') + (b[j] - '0');
            k++;
        }

        while (i >= 0){
            sum[k] = a[i] - '0';
            i--;
            k++;
        }

        while (j >= 0){
            sum[k] = b[j] - '0';
            j--;
            k++;
        }

        int len = sum.size() - 1;
        if (sum[len] == 0) len--;

        for (i = 0; i <= len; i++){
            if (sum[i] >= 10){
                sum[i + 1] += sum[i] / 10;
                sum[i] %= 10;
            }
        }

        if (sum[len + 1] > 0) len++;

        cout << "Case " << t << ":" << endl;
        printf("%s + %s = ",a,b);

        for (i = len; i >= 0; i--)
            cout << sum[i];
        cout << endl;

        if (t != T)
            cout << endl;

    }

    return 0;
}

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!