高精度大数加法

来源:互联网 发布:求数组平均值 编辑:程序博客网 时间:2024/05/16 12:45

带小数点的长高精度型相加

#include <iostream>#include <stdio.h>#include <cstring>using namespace std;char a[500];char b[500];int c[500];char xa[500];char za[500];char xb[500];char zb[500];char xc[500];int temp=0;int sun=0;char k[10];void solvexiao( char x[],char y[]){    if(strlen(x)<strlen(y))        swap(x,y);    int lena=strlen(x)-1;    int lenb=strlen(y)-1;    int i,j;    for(i=lena;i!=lenb;i--)    {        xc[i]=x[i]-'0';    }    for(i;i>=0;i--)        xc[i]=x[i]-'0'+y[i]-'0';    int tep=0;    for(int i=lena;i>=1;i--)    {        xc[i-1]+=xc[i]/10;        xc[i]%=10;    }    if(xc[0]>=10)    {        temp=1;        xc[0]-=10;    }    for(int i=0;i<=lena;i++)       {        xc[i]+='0';        if(xc[i]!='0')            sun=1;       }}void solveda(char x[],char y[]){    if(strlen(x)<strlen(y))        swap(x,y);    if(temp)    x[strlen(x)-1]++;    int lena=strlen(x)-1;    int lenb=strlen(y)-1;    int i,j;    for( i=lena,j=lenb;j>=0;i--,j--)    {        c[i]=x[i]-'0'+y[j]-'0';    }    for(i;i>=0;i--)        c[i]=x[i]-'0';    int tep=0;    for(int i=lena;i>=0;i--)    {        if(i!=0)        {        c[i-1]+=c[i]/10;        c[i]%=10;        }    }    for(int i=0;i<=lena;i++)        printf("%d",c[i]);}int main(){    while(~scanf("%s%s",&a,&b))    {    memset(za,0,sizeof(za));    memset(zb,0,sizeof(zb));    memset(xa,0,sizeof(xa));    memset(xb,0,sizeof(xb));    memset(xc,0,sizeof(xc));    memset(c,0,sizeof(c));    memset(k,0,sizeof(k));    temp=0;    sun=0;    int flaga=0;    int cot=0;    for(int i=0;i<strlen(a);i++)    {        if(a[i]=='.')        {            flaga=i+1;            break;        }        za[cot++]=a[i];    }    cot=0;    for(int i =flaga;i<strlen(a);i++)    {        xa[cot++]=a[i];    }    int flagb=0;    cot=0;    for(int i=0;i<strlen(b);i++)    {        if(b[i]=='.')        {            flagb=i+1;            break;        }        zb[cot++]=b[i];    }    cot=0;    for(int i =flagb;i<strlen(b);i++)    {        xb[cot++]=b[i];    }    if(flaga!=0&&flagb!=0)    {        solvexiao(xa,xb);    }    else    {        if(flaga!=0&&flagb==0)             solvexiao(xa,k);        if(flaga==0&&flagb!=0)            {solvexiao(k,xb);            }    }    solveda(za,zb);    if(sun)    {        cout<<".";        int i;        for( i=strlen(xc)-1;i>=0;i--)        {            if(xc[i]!='0')                break;        }        for(int j=0;j<=i;j++)            cout<<xc[j];    }    cout<<endl;    }    return 0;}


0 0