大数相加(完成),相减(未完成)

相加

void revert(char *a,char *b)
{
     int len_a=strlen(a);
     int len_b=strlen(b);
     for(int i=0;i<len_a/2;i++)
     {
         char temp=a[i];
            a[i]=a[len_a-1-i];
         a[len_a-1-i]=temp;
     }

    for(int i=0;i<len_b/2;i++)
    {
          char temp=b[i];
            b[i]=b[len_b-1-i];
         b[len_b-1-i]=temp;
    }
}

void add(char *a,char *b,int *c)
{
     int len_a=strlen(a);
        int len_b=strlen(b);
        if(len_a>len_b)
            c=(int *)malloc(sizeof(int)*(len_a+1));
        else
            c=(int *)malloc(sizeof(int)*(len_b+1));

        int i=0;
        int j=0;

        int k=0;
        int carry=0;
        while(i<len_a&&j<len_b)
        {
            int temp=a[i++]-'0'+b[j++]-'0'+carry;
            c[k++]=temp%10;
            carry=temp/10;
        }

        while(i<len_a)
        {
            int temp=a[i++]-'0'+carry;
            c[k++]=temp%10;
            carry=temp/10;
        }
        while(j<len_b)
        {
            int temp=b[j++]-'0'+carry;
            c[k++]=temp%10;
            carry=temp/10;
        }

        for(i=0;i<k;i++)
            printf("%d",c[k-1-i]);
    printf("\n");
}

相减

void delete(char *a,char *b,int *c)
{
        int len_a=strlen(a);
        int len_b=strlen(b);
        if(len_a>len_b)
            c=(int *)malloc(sizeof(int)*(len_a+1));
        else
            c=(int *)malloc(sizeof(int)*(len_b+1));

        int i=0;
        int j=0;

        int k=0;
        int carry=0;

//         while(i<len_a&&j<len_b)
//         {
//             int temp=a[i++]-'0'-(b[j++]-'0')-carry;
//             if(temp>=0)
//             {
//                 c[k++]=temp;
//                 carry=0;
//             }
//             else
//             {
//                 carry=1;
//                 c[k++]=-temp;
//             }

//         }

      while(i<len_a&&j<len_b)
        {
            if(a[i]<b[j])
            {

                c[k++]=a[i++]-b[j++]+10;
                if(i==len_a&&j==len_b)
                {
                    c[k-1]=c[k-1]-10;
                }
                else
                {
                    a[i]--;
                }


//                 printf("%d\n",a[i]-'0');

            }
            else
            {
                c[k++]=a[i++]-b[j++];
            }
//           printf("%d\n",c[k-1]);
        }

    printf("第一步\n");
    for(i=0;i<k;i++)
            printf("%d",c[k-1-i]);
    printf("\n");

    while(i<len_a)
    {
        c[k++]=a[i++]-'0';

    }
    while(j<len_b)
    {
        c[k++]=b[j++]-'0'+10;
        b[j]--;
    }
//         while(i<len_a)
//         {
//             int temp=a[i++]-'0'-carry;
//             if(temp>=0)
//             {
//                 c[k++]=temp;
//                 carry=0;
//             }
//             else
//             {
//                 carry=1;
//                 c[k++]=-temp;
//             }
//         }
//         while(j<len_b)
//         {
//             int temp=b[j++]-'0'-carry;
//             if(temp>=0)
//             {
//                 c[k++]=temp;
//                 carry=0;
//             }
//             else
//             {
//                 carry=1;
//                 c[k++]=-temp;
//             }
//         }
//     if(carry==1)
//         c[k-1]=c[k-1]*(-1);

    for(i=0;i<k;i++)
            printf("%d",c[k-1-i]);
    printf("\n");
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务