• 高精度特别策划 加减乘除余~~~


    P1932 A+B & A-B & A*B & A/B Problem

     

    题目背景

    这个题目很新颖吧!!!

    题目描述

    求A、B的和差积商余!

    输入输出格式

    输入格式:

    两个数两行

    A B

    输出格式:

    五个数

    和 差 积 商 余

    输入输出样例

    输入样例#1:
    1
    1
    输出样例#1:
    2
    0
    1
    1
    0

    说明

    length(A),length(B)<=10^4

    每个点3s。

    代码

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <string>
    
    using namespace std;
    
    typedef int hp[20002];
    hp a,b,c,d;
    int l1,l2,l3,i,code;
    string n1,n2;
    void init(hp a) {
        string s;
        int i;
        memset(a,0,sizeof(int)*20002);
        cin >> s;
        a[0] = s.length();
        for(i=1;i<=a[0];i++) {
            a[i]=s[a[0]-i]-48;
        } 
    }
    
    void print(hp a) {
        int i;
        for(int i=a[0]; i>=1; i--) cout << a[i];
        cout << endl;
    }
    
    void clear(hp a) {
        int i;
        for(int i=1;i<=a[0];i++) {
            a[i+1]+=a[i]/10;
            a[i]%=10;
        }
        while((a[a[0]]==0) && (a[0]>1)) a[0]--;
    }
    
    int compare(hp a, hp b) {
        int i;
        clear(a);
        clear(b);
        if(a[0]>b[0]) {
            return 1;
        }
        if(a[0]<b[0]) {
            return -1;
        }
        for(i=a[0]; i>=1; i--) {
            if(a[i]>b[i]) {
                return 1;
            }
            if(a[i]<b[i]) {
                return -1;
            }
        }
        return 0;
    }
    
    void plus1(hp a, hp b, hp c) {
        int i;
        memcpy(c,a,sizeof(int)*20002);
        if(b[0]>c[0]) c[0]=b[0];
        for(int i=1;i<=b[0];i++) {
            c[i]+=b[i];
        }
        c[0]++;
        clear(c);
    }
    
    void minus1(hp a, hp b, hp c) {
        int i;
        hp t;
        bool flag = false;
        if(compare(a,b)<0) {
            memcpy(c,b,sizeof(int)*20002);
            memcpy(t,b,sizeof(int)*20002);
            memcpy(b,a,sizeof(int)*20002);
            flag = true;
        } else memcpy(c,a,sizeof(int)*20002);
        for(i=1;i<=c[0];i++) {
            c[i+1]--;
            c[i]+=10-b[i];
        }
        clear(c);
        if(flag) memcpy(b,t,sizeof(int)*20002);
    }
    
    void multiply(hp a, hp b, hp c) {
        int i,j;
        memset(c, 0, sizeof(int)*20002);
        for(i=1; i<=a[0];i++) 
            for(j=1;j<=b[0];j++)
                c[i+j-1]+=a[i]*b[j];
        c[0]=a[0]+b[0];
        clear(c);
    }
    
    void divide(hp a, hp b, hp c, hp d) {
        int i,j,p;
        memset(c, 0, sizeof(int)*20002);
        memset(d, 0, sizeof(int)*20002);
        c[0]=a[0]; d[0]=1;
        for(j=a[0]; j>=1;j--) {
            d[0]++;
            for(p=d[0];p>=2;p--) {
                d[p]=d[p-1];
            }
            d[1]=a[j];
            while(compare(d,b)>=0) {
                c[j]++;
                minus1(d,b,d);
            }
        }
        clear(c);
        clear(d);
    }
    
    int main() {
        init(a);
        init(b);
        plus1(a,b,c);
        print(c);
        minus1(a,b,c);
        print(c);
        multiply(a,b,c);
        print(c);
        divide(a,b,c,d);
        print(c);
        print(d);
    }
    

      

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 相关阅读:
    我的游戏学习日志54———类型游戏策划(1)—动作游戏(1)
    我的游戏学习日志53——游戏游戏策划—小结
    IE8下Extjs报缺少':'符号错误
    Extjs 兼容IE8常见问题及解决方法
    程序员如何提升自己
    extjs layout 最灵活的页面布局样式
    如何运用军事战略建立更好的习惯
    Ext之页面多次请求问题 (下拉框发送无关请求)
    计算机网络通信那些事
    Java基础
  • 原文地址:https://www.cnblogs.com/radiumlrb/p/5860445.html
Copyright © 2020-2023  润新知