zoukankan      html  css  js  c++  java
  • 高精度加减乘除,嗯嗯嗯嗯

    #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;
    } 
  • 相关阅读:
    XML和HTML中常用转义字符:
    特殊符号大全
    CSS规范
    兼容ie6,ie7,ie8,firefox,chrome浏览器的代码片段
    模拟select选择器
    一行代码解决IE6/7/8/9/10兼容问题
    响应式页面之秘籍
    Global 全局样式基本设置
    webAPP meta 标签大全
    随笔小计 --
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/10458225.html
Copyright © 2011-2022 走看看