高精度实现

#加法

#include<bits/stdc++.h>
using namespace std;
int i,x;
int main(){
    char a1[600],b1[600];
    int a[600],b[600],c[600];
    int a1_len,b1_len,lenc;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    cin>>a1>>b1;
    a1_len=strlen(a1);
    b1_len=strlen(b1);
    for(i=0;i<a1_len;i++){
        a[a1_len-i]=a1[i]-48;
    }
    for(i=0;i<b1_len;i++){
        b[b1_len-i]=b1[i]-48;
    }
    lenc=1;
    while(lenc<=a1_len||lenc<=b1_len){
        c[lenc]=a[lenc]+b[lenc]+x;
        x=c[lenc]/10;
        c[lenc]=c[lenc]%10;
        lenc++;
    }
    c[lenc]=x;
    if(c[lenc]==0){
        lenc--;
    }
    for(i=lenc;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

#乘法

#include<bits/stdc++.h>
using namespace std;
char a[3000];
char b[3000];
int x[3000];
int y[3000];
int m[3000];
int i;
int j;
int len;
int n;
int main(){
    cin>>a>>b;
    int lena=strlen(a);
    int lenb=strlen(b);
    for(i=1;i<=lena;i++)
     x[i]=a[lena-i]-48;
    for(i=1;i<=lenb;i++)
    y[i]=b[lenb-i]-48;

    for(i=1;i<=lena;i++) {
        for (j=1; j <=lenb; j++)
            m[i+j-1]+=x[i]*y[j];
    }
    for(int i=0;i<lena+lenb;i++){
       
    if(m[i]>9)
    {
        m[i+1]+=m[i]/10;
        m[i]%=10;
    }
    }
    len=lena+lenb;
    while(m[len]==0&&len>1)len--;
    for(i=len;i>=1;i--)cout<<m[i];
    return 0;
}

就注意一下倒数第三行,首位去零的操作

posted @ 2020-12-13 21:26  jakekiller00  阅读(91)  评论(0编辑  收藏  举报