大数四则运算(加、减、乘、除)

大数加法:

代码:

#include
#define MAX 1000
using namespace std;
int Addition(char num1[],char num2[],int sum[])
{
    int i,j,len;
    int n2[MAX]={0};
    int len1=strlen(num1);
    int len2=strlen(num2);
    len=max(len1,len2);
    for(i=len1-1,j=0;i>=0;i--,j++)
        sum[j]=num1[i]-'0';
    for(i=len2-1,j=0;i>=0;i--,j++)
        n2[j]=num2[i]-'0';
    for(i=0;i9)
        {
            sum[i]-=10;
            sum[i+1]++;
        }
    }
    int l=len+2;
    while(sum[l]==0) l--;
    return l;
}
int main()
{
    int i,len,sum[MAX];
    char num1[MAX],num2[MAX];
    while(~scanf("%s %s",num1,num2))
    {
      memset(sum,0,sizeof(sum));
      len=Addition(num1,num2,sum);
      if(len<0)
        printf("0\n");
      else
      {
        for(i=len;i>=0;i--)
        {
           printf("%d",sum[i]);
        }
         printf("\n");
      }
    }
    return 0;
}

大数减法:

代码:

#include
#define MAX 105
using namespace std;
int Substraction(char s1[], char s2[], int re[])
{
    int i,j,len,n[MAX]={0},flag=0;
    int len1=strlen(s1);
    int len2=strlen(s2);
    if(len1s2[i])
                break;
            else if(s1[i]=0;i--,j++)
        re[j]=s1[i]-'0';
    for(i=len2-1,j=0;i>=0;i--,j++)
        n[j]=s2[i]-'0';
    for(i=0;i<=len;i++)
    {
        re[i]=re[i]-n[i];
        if(re[i]<0)
        {
            re[i]+=10;
            re[i+1]--;
        }
    }
    len+=2;
    while(re[len]==0) len--;
    if(flag==1)
        re[len]*=-1;
    return len;
}
int main()
{
    char s1[MAX],s2[MAX];
    int i,re[MAX],len;
    while(~scanf("%s %s",s1,s2))
    {
        memset(re,0,sizeof(re));
        len=Substraction(s1,s2,re);
        if(len<0)
          printf("0\n");
        else
        {
            for(i=len;i>=0;i--)
                printf("%d",re[i]);
            printf("\n");
        }
    }
    return 0;
}

大数乘法:

代码:

#include
#define MAX 10005
using namespace std;
int Multiplication(char num1[],char num2[], int sum[])
{
    int i,j,len,len1,len2;
    int a[MAX+10]={0};
    int b[MAX+10]={0};
    int c[MAX*2+10]={0};
    len1=strlen(num1);
    for(j=0,i=len1-1;i>=0;i--)
        a[j++]=num1[i]-'0';
    len2=strlen(num2);
    for(j=0,i=len2-1;i>=0;i--)
        b[j++]=num2[i]-'0';
    for(i=0;i=10)
        {
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
    for(i=MAX*2;c[i]==0&&i>=0;i--);
    len=i+1;
    for(;i>=0;i--)
        sum[i]=c[i];
    return len;
}
int main()
{
    int i, len;
    int sum[MAX*2+10];
    char s1[MAX],s2[MAX];
    while(~scanf("%s %s",s1,s2))
    {
      memset(sum,0,sizeof(sum));
      len=Multiplication(s1,s2,sum);
      if(len<=0)
        printf("0\n");
      else
      {
        for(i=len-1;i>=0;i--)
          printf("%d",sum[i]);
        printf("\n");
      }
    }
    return 0;
}

 

你可能感兴趣的:(数据结构)