大数加减法

void Add(char s1[],char s2[]) //需要两个字符串参数&&无返回值
 {
     int num1[M],nm2[M];
     int i,j;
     len1=strlen(s1);
     len2=strlen(s2);
     for(i=len1-1,j=0;i>=0;i--)//num[0]保存的是低位
             num1[j++]=s1[i]-'0';
     for(i=len2-1,j=0;i>=0;i--)
             num2[j++]=s2[i]-'0';
     for(i=0;i<M;i++)
     {
         num1[i]+=num2[i];
         if(num1[i]>9)
         {
             num1[i]-=10;
             num1[i+1]++;
         }
     }

  for(i=M;(i>=0)&&(num1[i]==0);i--)//找到第一个不是零的数
    {
        if(i>=0)
            for(;i>=0;i--)
                printf("%d",num1[i]);
        else
            printf("0\n")
    }

加法2

void Add(char a[],char b[],char d[])
{
    char c[10001];
    int lena=strlen(a),lenb=strlen(b);
    int i,j,len;
    len=lena>lenb?lena:lenb;
    len++;
    c[0]='\0';
    for(i=1;i<=len;i++)c[i]='0';
    for(i=1;i<=lena;i++)c[i]+=a[lena-i]-48;
    for(i=1;i<=lenb;i++)c[i]+=b[lenb-i]-48;
    for(i=0;i<=len;i++)
        if(c[i]>57)
    {
            c[i]-=10;
            c[i+1]++;
        }

    for(i=len;i>1;i--)
        if(c[i]==48)len--;
        else break;
     for(i=0;i<=len;i++)
        d[i]=c[len-i];
}

减法1

//d2 > d1,如果需要比较大小自己加一个不麻烦。
void dec(char *d1, char *d2, char *out)
{
    int len_min = strlen(d1);
    int len_max = strlen(d2);
    int last_j = 0;     //最关键的错位
    while(len_min > 0)
    {
        int dd1 = d1[len_min - 1] - '0';
        int dd2 = d2[len_max - 1] - '0';
        if (last_j) dd2 = dd2 - 1;
        last_j = dd2 >= dd1 ? 0 : 1;
        dd2 = dd2 >= dd1 ? dd2 : dd2 + 10;
        out[len_max] = (dd2 - dd1) + '0';
        len_max -- ;
        len_min -- ;
    }
    while(len_max > 0)
    {
        int dd2 = (d2[len_max -1] - '0');
        if (last_j) dd2 = dd2 - 1;
        last_j = dd2 >= 0 ? 0 : 1;
        dd2 = dd2 >= 0 ? dd2 : dd2 + 10;
        out[len_max] = dd2 + '0';
        len_max --;
    } 
    if (last_j)
          out[0] ='1';
    else
          out[0] ='0';
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值