zoukankan      html  css  js  c++  java
  • 洛谷P1932 A+B A-B A*B A/B A%B Problem

    P1932 A+B 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

    A,B>0

    每个点3s。

    /*
    刚写完高精加减乘 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 20010
    using namespace std;
    int a[maxn],b[maxn],c[maxn];
    struct node{
        int len,zu[maxn];
        bool operator < (const node x)const{
            if(len!=x.len)return len<x.len;
            for(int i=1;i<=len;i++)
                if(zu[i]!=x.zu[i])return zu[i]<x.zu[i];
        }
        node operator + (const node x)const{
            node res;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(c,0,sizeof(c));
            int l=max(len,x.len);
            for(int i=1,j=len;i<=len;i++,j--)a[i]=zu[j];
            for(int i=1,j=x.len;i<=x.len;i++,j--)b[i]=x.zu[j];
            for(int i=1;i<=l;i++){
                c[i]+=a[i]+b[i];
                c[i+1]=c[i]/10;
                c[i]%=10;
            }
            while(c[l+1]){
                l++;
                c[l+1]=c[l]/10;
                c[l]%=10;
            }
            for(int i=1,j=l;i<=l;i++,j--)res.zu[i]=c[j];
            res.len=l;
            return res;
        }
        node operator - (const node x)const{
            node res;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(c,0,sizeof(c));
            int l=max(len,x.len);
            for(int i=1,j=len;i<=len;i++,j--)a[i]=zu[j];
            for(int i=1,j=x.len;i<=x.len;i++,j--)b[i]=x.zu[j];
            for(int i=1;i<=l;i++){
                if(a[i]<b[i])a[i]+=10,a[i+1]-=1;
                c[i]+=a[i]-b[i];
            }
            while(c[l]==0)l--;
            res.len=l;
            for(int i=1,j=l;i<=l;i++,j--){
                res.zu[i]=c[j];
            }
            return res;
        }
        node operator * (const node x)const{
            node res;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(c,0,sizeof(c));
            int l=len+x.len-1;
            for(int i=1,j=len;i<=len;i++,j--)a[i]=zu[j];
            for(int i=1,j=x.len;i<=x.len;i++,j--)b[i]=x.zu[j];
            for(int i=1;i<=len;i++)
                for(int j=1;j<=x.len;j++)
                    c[i+j-1]+=a[i]*b[j];
            for(int i=1;i<=l;i++){
                c[i+1]+=c[i]/10;
                c[i]%=10;
            }
            while(c[l+1]){
                l++;
                c[l+1]=c[l]/10;
                c[l]%=10;
            }
            while(c[l]==0&&l>0)l--;
            if(l==0)c[++l]=0;
            for(int i=1,j=l;i<=l;i++,j--)res.zu[i]=c[j];
            res.len=l;
            return res;
        }
    }A,B;
    char chA[maxn],chB[maxn];
    int main(){
        freopen("Cola.txt","r",stdin);
        scanf("%s",chA+1);
        scanf("%s",chB+1);
        A.len=strlen(chA+1);
        B.len=strlen(chB+1);
        for(int i=1;i<=A.len;i++)A.zu[i]=chA[i]-'0';
        for(int i=1;i<=B.len;i++)B.zu[i]=chB[i]-'0';
        node he,cha,ji,shang,yu;
        bool flag=0;
        if(A<B)swap(A,B),flag=1;
        he=A+B;
        cha=A-B;
        ji=A*B;
        for(int i=1;i<=he.len;i++)cout<<he.zu[i];cout<<endl;
        if(flag)cout<<'-';
        for(int i=1;i<=cha.len;i++)cout<<cha.zu[i];cout<<endl;
        for(int i=1;i<=ji.len;i++)cout<<ji.zu[i];cout<<endl;
    }
  • 相关阅读:
    Java实现八大排序算法
    Java实现二分查找算法
    Win10下通过IIS调试ASP程序遇到的问题和解决方案
    Nginx几种负载均衡算法及配置实例
    Java解决CSRF问题
    Nginx Https配置不带www跳转www
    面试中的Https
    面试中的DNS
    java系列视频教程下载
    关于Mysql DATE_FORMAT() 日期格式
  • 原文地址:https://www.cnblogs.com/thmyl/p/7732562.html
Copyright © 2011-2022 走看看