高精度算法

加法

#include<stdio.h>
#include<string.h>
int la,lb,i,j=0,lm,n;
char a[501],b[501],c[502];
int main()
{
    gets(a);
    gets(b);
    la=strlen(a);
    lb=strlen(b);
    lm=la>lb?la:lb;
    for(i=1;i<=lm;i++)
    {
        n=j;
        if (i<=la) n+=a[la-i]-'0';
        if (i<=lb) n+=b[lb-i]-'0';
        j=n/10;
        n=n%10;
        c[i-1]=n+'0';
    }
    if (j==1)
    {
        c[lm]='1';
        lm++;
    }
    c[lm]='\0';
    for(i=lm-1;i>=0;i--)
        printf("%c",c[i]);
    return 0;
}

减法

#include<stdio.h>
#include<string.h>
char a[101],b[101],c[101],d[101],e[101];
int i,la,lb,n,t;
int main()
{
    gets(c);
    gets(d);
    if (strcmp(c,d)==0)
    {
        printf("0");
        return 0;
    }
    la=strlen(c);
    lb=strlen(d);
    if (la>lb||(la==lb&&strcmp(c,d)>0))
    {
        strcpy(a,c);
        strcpy(b,d);
    }
    else
    {
        printf("-");
        strcpy(a,d);
        strcpy(b,c);
    }
    la=strlen(a);
    lb=strlen(b);
    t=0;
    for(i=1;i<=la;i++)
    {
        n=a[la-i]-48;
        n=n-t;
        if (lb>=i) n=n-b[lb-i]+48;
        if (n<0)
        {
            n+=10;
            t=1;
        }
        else t=0;
        e[i-1]=n+48;
    }
    while(e[la-1]=='0')
        la--;
    for(i=la-1;i>=0;i--)
        printf("%c",e[i]);
    return 0;
}

乘法

#include<stdio.h>
#include<string.h>
char a1[50001],b1[50001];  
int a[50001],b[50001],i,x,len,j,c[50001];  
int main ()  
{  
    gets(a1);
    gets(b1);
    a[0]=strlen(a1);b[0]=strlen(b1);  
    for (i=1;i<=a[0];++i)a[i]=a1[a[0]-i]-'0';
    for (i=1;i<=b[0];++i)b[i]=b1[b[0]-i]-'0';  
    for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];  
    len=a[0]+b[0];                                       
    for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;} 
    while (c[len]==0&&len>1)len--; 
    for (i=len;i>=1;--i)printf("%d",c[i]);  
    return 0;  
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值