高精度 加减乘除 【精华】

来源:互联网 发布:网络直播平台排行榜 编辑:程序博客网 时间:2024/05/22 05:12
一、高精度加法
#include<stdio.h>#include<stdlib.h>#include<string.h>int a[1010],b[1010],c[1010];char s[1010];int main(){    int i,j,k,m,n;    int alen,blen,clen;    gets(s);    alen=strlen(s);        for(i=alen-1;i>=0;i--)        a[alen-i]=s[i]-'0';    gets(s);    blen=strlen(s);        for(i=blen-1;i>=0;i--)        b[blen-i]=s[i]-'0';            clen=alen>blen?alen:blen;    for(i=1;i<=clen;i++)        c[i]=a[i]+b[i];    for(i=1;i<clen;i++)        if(c[i]>=10){            c[i+1]++;            c[i]-=10;        }    for(i=clen;i>=1;i--)        printf("%d",c[i]);    return 0;}


二、高精度减法
#include<stdio.h>#include<stdlib.h>#include<string.h>int a[1010],b[1010],c[1010];char s[1010];int main(){    int i,j,k,m,n;    int alen,blen,clen;    gets(s);    alen=strlen(s);        for(i=alen-1;i>=0;i--)        a[alen-i]=s[i]-'0';    gets(s);    blen=strlen(s);        for(i=blen-1;i>=0;i--)        b[blen-i]=s[i]-'0';                for(i=1;i<=alen;i++)        c[i]=a[i]-b[i];    for(i=1;i<alen;i++)        if(c[i]<0){            c[i+1]--;            c[i]+=10;        }    while(c[alen]==0 && alen!=1)        alen--;    for(i=alen;i>=1;i--)        printf("%d",c[i]);    return 0;}


三、高精度乘法
#include<stdio.h>#include<stdlib.h>#include<string.h>int a[1010],b[1010],c[2010];char s[1010];int main(){    int i,j,k,m,n;    int alen,blen,clen;    gets(s);    alen=strlen(s);        for(i=alen-1;i>=0;i--)        a[alen-i]=s[i]-'0';    gets(s);    blen=strlen(s);        for(i=blen-1;i>=0;i--)        b[blen-i]=s[i]-'0';                for(i=1;i<=alen;i++)        for(j=1;j<=blen;j++)            c[i+j-1]+=a[i]*b[j];                for(i=1;i<alen+blen-1;i++)        if(c[i]>=10){            c[i+1]+=c[i]/10;            c[i]%=10;        }    for(i=alen+blen-1;i>=1;i--)        printf("%d",c[i]);    return 0;}


四、高精度除法
#include<stdio.h>#include<stdlib.h>#include<string.h>int a[1010],c[2010];char s[1010],tmp;int main(){    int i,j,k,m,n;    int alen,clen;    gets(s);    alen=strlen(s);        for(i=0;i<alen;i++)        a[i+1]=s[i]-'0';    //tmp=getchar();    scanf("%d",&m);            k=a[1];i=1;    while(k<m){        i++;        k=k*10+a[i];    }    clen=0;    c[++clen]=k/m;    k%=m;    i++;    for(;i<=alen;i++){        k=k*10+a[i];        c[++clen]=k/m;        k%=m;    }    puts("结果是:");    for(i=1;i<=clen;i++)        printf("%d",c[i]);    if(k>0)        printf("\n余数是:%d\n",k);        return 0;}


1 0