昨天花了半天的时间研究大整数的加减乘除的运算问题,首先在网上找到了大整数加法的代码,感觉想法还比较容易理解的,依据这个想法在做除法就很容易了,几乎就是把加法的拷贝过来,再改几处就没问题了。然后做乘法,乘法和加法的思路有不同,有思路但是很不清晰,又去网上百度借鉴别人的思路,看懂了,把别人的思路敲进电脑里,编译运行没问题通过了。最后是除法,和乘法又有有很大不同的,看了别人的一些思路,没怎么懂,很多人的代码用C++写的,我对C++的语法不熟悉,目前比较依赖C,所以除法没做出来,就做了个加减乘组合在一起的程序,编译运行都正确,不过要求输入的第一个数要大于第二个数,另外我用的编译器是DEVC++,在别的编译器上是否能运行没有验证过。代码如下:


#include <stdio.h>
#include <string.h>
#define N 210
//主函数
int main()
{
 int ADD(char str1[],char str2[]);
    int MIN(char str1[],char str2[]);
    int MUL(char str1[],char str2[]);
    int  counter,k;
    char str1[N],str2[N];
    printf("Please input the number of the testing group:\n");
    scanf("%d",&counter);
    for(k=0;k<counter;k++)
 {
  printf("Please input two large number:\n");
        scanf("%s%s",str1,str2);
        ADD(str1,str2);
        MIN(str1,str2);
        MUL(str1,str2);
    }
    system("pause");
}
//下谓构造函数加、减、乘
//此为大整数加法运算代码
void ADD(char str1[],char str2[])
{
 int i,j,length1,length2,tag,tag1,n,m;
    int num1[N],num2[N];
    length1=strlen(str1);
    length2=strlen(str2);
    for(i=0;i<210;i++)               
    num1[i]=0;
    for(i=0;i<210;i++)
    num2[i]=0;
    j=0;
    for(i=length1-1;i>=0;i--)      
    {
  num1[j]=str1[i]-'0';
        j++;
    }
 j=0;
    for(i=length2-1;i>=0;i--)
    {
  num2[j]=str2[i]-'0';
        j++;
    }
    for(i=0;i<200;i++)              
    {   
  num1[i]+=num2[i];
        if(num1[i]>=10)
        {
   num1[i]-=10;
            num1[i+1]++;
        }       
     }
    for(i=209;i>=0;i--)               
    {
  if(num1[i]!=0||num2[i]!=0)
        {
   tag=i;
            break;
        }
    }
    printf("The result of add is:\n");
    for(i=tag;i>=0;i--)               
    {
  printf("%d",num1[i]);
    }
    printf("\n");
    return 0;
}
//此为大整数减法的代码
void MIN (char str1[],char str2[])
{
 int n,m,length11,length22,tag1;
 int num3[N],num4[N];
    length11=strlen(str1);
    length22=strlen(str2);
    for(n=0;n<210;n++)               
    num3[n]=0;
    for(n=0;n<210;n++)
    num4[n]=0;
    m=0;
 for(n=length11-1;n>=0;n--)      
    {
  num3[m]=str1[n]-'0';
        m++;
    }
    m=0;
    for(n=length22-1;n>=0;n--)
    {
  num4[m]=str2[n]-'0';
        m++;
    }
    for(n=0;n<200;n++)              
    {   
  num3[n]-=num4[n];
        if(num3[n]<0)
        {
   num3[n]+=10;
            num3[n+1]--;
        }       
    }
   for(n=209;n>=0;n--)               
   {
  if(num3[n]!=0||num4[n]!=0)
        {
   tag1=n;
            break;
        }
   }
   printf("The result of plus is \n");
   for(n=tag1;n>=0;n--)               
   {
  printf("%d",num3[n]);
   }
   printf("\n");
   return 0;
}
//此为大整数乘法的代码
void MUL(char str1[],char str2[])
{
     int p,q,length3,length4,tag2;
     int num5[N],num6[N],num7[N];
     length3=strlen(str1);
     length4=strlen(str2);
     for(p=0;p<N;p++)
     {
   num5[p]=0;
   num6[p]=0;
   num7[p]=0;
  }
  q=0;
 for(p=length3-1;p>=0;p--)
 {
  num5[q]=str1[p]-'0';
  q++;
 }
 q=0;
 for(p=length4-1;p>=0;p--)
 {
  num6[q]=str2[p]-'0';
  q++;
 }
 for(q=0;q<length4;q++)
 for(p=0;p<length3;p++)
 {
  num7[p+q]+=num5[p]*num6[q];
  while(num7[p+q]>=10)
  {
   num7[q+p]-=10;
      num7[q+p+1]++;
     }
 }
 for(p=N-1;p>=0;p--)
 {
  if(num7[p]!=0)
  {
   tag2=p;
   break;
  }
 }
 printf("The result of mul is: \n");
 for(p=tag2;p>=0;p--)
 {
  printf("%d",num7[p]);
 }
 printf("\n\n");
 return 0;
}