模拟大数运算
发布时间:2021-03-06 11:20:54  所属栏目:大数据  来源:网络整理 
            导读:1.大数乘法 void multify(const char* a,const char* b){ assert(a != NULLb != NULL); int lena = strlen(a); int lenb = strlen(b); vectorint sum(lena + lenb,0); for (int i = 0; i lena; i++){ for (int j = 0; j lenb; j++){ sum[i + j + 1] += (a[
                
                
                
            | 
 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;
}(编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 


