mawe

导航

两个任意长度整数的加减乘除

#include<stdio.h>

#include<string.h>

#include<math.h>

#define MAX 100

void jia(char aa[],char bb[],int n,int m)

{

       int i,temp=0,j;

       int a[MAX]={0},b[MAX]={0};

       int c[MAX]={0};

       for(i=n-1,j=0;i>=0;i--,j++)

              a[j]=aa[i]-'0';

       for(i=m-1,j=0;i>=0;i--,j++)

              b[j]=bb[i]-'0';

       if(n<m)

              n=m;

       for(i=0;i<=n;i++)

       {

              c[i]=b[i]+a[i]+temp;

              if(c[i]>=10)

              {

                     c[i]=c[i]-10;

                     temp=1;

              }

              else

                     temp=0;

       }

       if(c[n]==0)

              for(i=n-1;i>=0;i--)

                     printf("%d",c[i]);

       else

       {

              for(i=n;i>=0;i--)

                     printf("%d",c[i]);

       }

       printf("\n");

}

void fun2(int a[],int b[],int n)

{

       int c[MAX]={0};

       int i,j,temp=0;

       for(i=0;i<=n;i++)

       {

              c[i]=a[i]-b[i]-temp;

              if(c[i]<0)

              {

                     c[i]=c[i]+10;

                     temp=1;

              }

              else

                     temp=0;

       }

       for(i=n;i>=0;i--)

              if(c[i]!=0)

                     break;

       for(j=i;j>=0;j--)

       printf("%d",c[j]);

       printf("\n");

}

void cha(char aa[],char bb[],int n,int m)

{

       int a[MAX]={0},b[MAX]={0};

       int i,j,w;

       for(i=n-1,j=0;i>=0;i--,j++)

              a[j]=aa[i]-'0';

       for(i=m-1,j=0;i>=0;i--,j++)

              b[j]=bb[i]-'0';

 

              if(n<m)

              {

                  printf("-");

                     fun2(b,a,m);

                    

              }

          if(n>m)

                 fun2(a,b,n);

          if(n==m)

          {

                     w=strcmp(aa,bb);

                     if(w>0)

                            fun2(a,b,n);

                     else

                            if(w<0)

                            {

                                   printf("-");

                                   fun2(b,a,n);

                            }

                            else

                                   printf("0");

         }

 

             

}

void cheng(char aa[],char bb[],int n,int m)

{

       int i,temp=0,j;

       int a[MAX]={0},b[MAX]={0};

       int c[MAX]={0};

       for(i=n-1,j=0;i>=0;i--,j++)

              a[j]=aa[i]-'0';

       for(i=m-1,j=0;i>=0;i--,j++)

              b[j]=bb[i]-'0';

       for(i=0;i<=m;i++)

       {

              for(j=0;j<=n;j++)

              {

                     c[i+j]=c[i+j]+b[i]*a[j];

                     c[i+j]=c[i+j]+temp;

                     if(c[i+j]>=10)

                     {

                            temp=c[i+j];

                            c[i+j]=c[i+j]%10;

                            temp=temp/10;

                     }

                     else

                            temp=0;

              }

       }    

       for(i=m*n;i>=0;i--)

              if(c[i]!=0)

                     break;

       for(j=i;j>=0;j--)

              printf("%d",c[j]);

       printf("\n");

}

int bijiao(int a[],int b[],int j,int m)

{

       int i;

       int t;

       for(i=j,t=1;i<m+j;i++,t++)

       {

             

              if(a[i]>b[t])

                     return 1;

              if(a[i]<b[t])

                     return 2;

       }

       return 3;

}

int bijiao1(int a[],int b[],int j,int m)

{

       int i;

       int t;

       for(i=j,t=1;i<m+j;i++,t++)

       {

             

              if(a[i]>b[t])

                     return 1;

              if(a[i]<b[t])

                     return 2;

       }

       return 3;

}

void fun(int a[],int b[],int c[],int j,int m)

{

       int i,t=0,temp=0,x,n;

       while(t>-1)

       {

              temp=0;

              t++;

              for(i=j+m-1,n=m;i>=j&&n>0;i--,n--)

              {

                     a[i]=a[i]-b[n]-temp;

                     if(a[i]<0)

                     {

                            a[i]=a[i]+10;

                            temp=1;

                     }

                     else

                            temp=0;

              }

              x=bijiao(a,b,j,m);

              if(x==2)

                     break;

       }

       c[j]=t;

}

void fun1(int a[],int b[],int c[],int j,int m)

{

       int i,t=0,temp=0;

       int n,x;

       while(t>-1)

       {

              t++;

              for(i=j+m,n=m;i>=j;i--,n--)

              {

                     a[i]=a[i]-b[n]-temp;

                     if(a[i]<0)

                     {

                            a[i]=a[i]+10;

                            temp=1;

                     }

                     else

                            temp=0;

              }

              if(a[j]==0)

              {

                     x=bijiao1(a,b,j+1,m);

                     if(x==2)

                            break;

              }

                    

       }

       c[j+1]=t;

}

void chu(char aa[],char bb[],int n,int m)

{

       int x,v=1;

       int a[MAX]={0},i;

       int b[MAX]={0},j;

       int c[MAX]={0},flog=1;

       char w[MAX];

       for(i=0;i<m;i++)

              w[i]=aa[i];

       flog=strcmp(w,bb);

       for(i=0;i<n;i++)

              a[i]=aa[i]-'0';

       for(i=0;i<m;i++)

              b[i+1]=bb[i]-'0';

       j=0;

       while(v)

       {

              if(a[j]==0)

              {

                     j++;

                     if(j+m>n+1)

                            break;

                     continue;

              }

              x=bijiao(a,b,j,m);

              if(x==1||x==3)

                     fun(a,b,c,j,m);

              else

              {

                     if(j+m>=n)

                            break;

                     fun1(a,b,c,j,m);

              }    

              if(j+m>=n+1)

                     break;

              if(a[j]==0)

                     j++;

 

       }

       if(flog>=0)

              n=n/m+1;

       else

              n=n/m;

       printf("商:");

       for(j=0;j<n;j++)

              printf("%d",c[j]);

       for(i=0;i<MAX;i++)

              if(a[i]!=0)

                     break;

       for(v=MAX-1;v>=0;v--)

              if(a[v]!=0)

                     break;

       if(i<=v)

       {

              printf("\n余:");

              for(;i<=v;i++)

                     printf("%d",a[i]);

       }

       else

              printf("\n余:0");

       printf("\n");

      

}

void main()

{

       int n,m;

       char aa[MAX],bb[MAX];

       printf("请输入第一个大数:");

       gets(aa);

       n=strlen(aa);

       printf("请输入第二个大数:");

       gets(bb);

       m=strlen(bb);

       printf("两个数之和:");

       jia(aa,bb,n,m);

       printf("两个数之差:");

       cha(aa,bb,n,m);

       printf("两个数乘:");

       cheng(aa,bb,n,m);

       printf("两个数之除:");

       chu(aa,bb,n,m);

 

}

posted on 2012-08-04 00:18  ma1076492641  阅读(457)  评论(0编辑  收藏  举报