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

大数加法:

代码:

#include<bits/stdc++.h>
#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;i<len;i++)
    {
        sum[i]+=n2[i];
        if(sum[i]>9)
        {
            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<bits/stdc++.h>
#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(len1<len2)
    {
        flag=1;
        swap(s1,s2);
        swap(len1,len2);
    }
    else if(len1==len2)
    {
        for(i=0;i<len1;i++)
        {
            if(s1[i]==s2[i])
                continue;
            else if(s1[i]>s2[i])
                break;
            else if(s1[i]<s2[i])
            {
                flag=1;
                swap(s1,s2);
                break;
            }
        }
    }
    len=max(len1,len2);
    for(i=len1-1,j=0;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<bits/stdc++.h>
#define MAX 105
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<len2;i++)
    {
        for(j=0;j<len1;j++)
        {
            c[i+j]+=b[i]*a[j];
        }
    }
    for(i=0;i<MAX*2;i++)
    {
        if(c[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;
}

猜你喜欢

转载自blog.csdn.net/zcmu_2024/article/details/81147865
今日推荐