高精度加减乘除,嗯嗯嗯嗯

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;

int myMax(int x,int y){ return x>y?x:y; }

void print(int a[],int end)
{
    cout <<"{";
    for(int i=a[0];i>=end;i--) cout << a[i];
    cout <<"}";
}

int cmp(int a[],int b[],int x)
{
    if(a[0]-x+1>b[0]) return 1;
    if(a[0]-x+1<b[0]) return -1;
    for(int i=a[0];i>=x;i--)
    {
        int pos = b[0]-a[0]+i;
        if(a[i]>b[pos])    return 1;
        if(a[i]<b[pos]) return -1;
    } 
    return 1;
}
void div2(int a[],int b[],int c[])
{
    string s1,s2;
    cin >> s1 >> s2;
    for(int i=0;i<100;i++) a[i]=b[i]=c[i]=0;
    a[0]=s1.length();
    b[0]=s2.length();
    for(int i=1;i<=a[0];i++) a[i]=s1[a[0]-i]-'0';
    for(int i=1;i<=b[0];i++) b[i]=s2[b[0]-i]-'0';
    c[0]=a[0]-b[0]+1; 
    int x = a[0]-b[0]+1;
    while(x>=1)
    {
        print(a,x); cout << endl;
        print(b,1); cout << endl;
        if(cmp(a,b,x)==1)
        {
            c[x]++;
            for(int i=x;i<=b[0]+x-1;i++)
            {
                if(a[i]<b[i-x+1]) 
                {
                    a[i+1]--;
                    a[i]+=10;
                }
                a[i]-=b[i-x+1];
            }
            while(a[a[0]]==0 && a[0]!=1) a[0]--;
        }    
        else
        {
            x--; 
        }    
    }
    while(c[c[0]]==0 && c[0]!=1) c[0]--;
    for(int i=0;i<c[0];i++) cout << c[c[0]-i];  cout <<endl;//result
    for(int i=0;i<a[0];i++) cout << a[a[0]-i];  cout <<endl;    
}  
void div(int a[],int b,int c[])//高精度除以低精度 
{
    string s;
    cin >> s;
    cin >> b;
    for(int i=0;i<100;i++) a[i]=c[i]=0;
    c[0]=a[0]=s.length();
    for(int i=1;i<=a[0];i++) a[i]=s[a[0]-i]-'0';
    
    int data = 0,x=a[0];
    while(x>=1)
    {
        data = data*10+a[x];
        c[x] = data/b;
        data %= b;
        x--;
    }
    while(c[c[0]]==0 && c[0]!=1) c[0]--;
    for(int i=0;i<c[0];i++) cout << c[c[0]-i];
}
void mul(int a[],int b[],int c[])
{
    string s1,s2;
    cin >> s1 >> s2;
    for(int i=0;i<100;i++) a[i]=b[i]=c[i]=0;
    a[0]=s1.length();
    b[0]=s2.length();
    c[0]=a[0]+b[0];
    for(int i=1;i<=a[0];i++) a[i]=s1[a[0]-i]-'0';
    for(int i=1;i<=b[0];i++) b[i]=s2[b[0]-i]-'0';
    for(int i=1;i<=a[0];i++)
    {
        int x = 0;
        for(int j=1;j<=b[0];j++)
        {
            c[i+j-1]+=a[i]*b[j]+x;
            x = c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+b[0]]+=x;
    }
    while(c[c[0]]==0 && c[0]!=1) c[0]--;
    for(int i=0;i<c[0];i++) cout << c[c[0]-i]; 
}
void sub(int a[],int b[],int c[])//假设a>=b 
{
    string s1,s2;
    cin >> s1 >> s2;
    for(int i=0;i<100;i++) a[i]=b[i]=c[i]=0;
    a[0]=s1.length();
    b[0]=s2.length();
    c[0]=myMax(a[0],b[0]);
    for(int i=1;i<=a[0];i++) a[i]=s1[a[0]-i]-'0';
    for(int i=1;i<=b[0];i++) b[i]=s2[b[0]-i]-'0';
    for(int i=1;i<=c[0];i++)
    {
        if(a[i]<b[i])
        {
            a[i]+=10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
    }
    while(c[c[0]]==0 && c[0]!=1) c[0]--;
    for(int i=0;i<c[0];i++) cout << c[c[0]-i];
}
void add(int a[],int b[],int c[])
{
    string s1,s2;
    cin >> s1 >> s2;
    for(int i=0;i<100;i++) a[i]=b[i]=c[i]=0; 
    a[0]=s1.length();
    b[0]=s2.length();
    c[0]=myMax(a[0],b[0])+1;
    for(int i=1;i<=a[0];i++) a[i]=s1[a[0]-i]-'0';
    for(int i=1;i<=b[0];i++) b[i]=s2[b[0]-i]-'0';
    
    for(int i=1;i<=c[0];i++)
    {
        
        c[i]+=a[i]+b[i];
        if(c[i]>=10)
        {
            c[i+1]++;
            c[i]%=10;
        }
    }
    while(c[c[0]]==0 && c[0]!=1) c[0]--;
    for(int i=1;i<=c[0];i++) cout << c[c[0]-i+1];
} 
void init(int a[])
{
    string s;
    cin >> s;
    a[0]=s.length();
    for(int i=1;i<=a[0];i++)
        a[i]=s[a[0]-i]-'0';
    for(int i=1;i<=a[0];i++)
        cout << a[i] << endl;
}
int main(void)
{
    freopen("d://1.txt","r",stdin);
    int a[100],b[100],c[100],d;
    //init(a);
    //add(a,b,c);
    //sub(a,b,c);
    //mul(a,b,c);
    //div(a,d,c);
    div2(a,b,c);
    return 0;
} 
原文地址:https://www.cnblogs.com/zuimeiyujianni/p/10458225.html