• P1932 A+B A-B A*B A/B A%B Problem


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

    链接:https://www.luogu.org/problemnew/show/P1932

    题目背景

    这个题目很新颖吧!!!

    题目描述

    求A、B的和差积商余!

    由于数据有修改,减法运算结果可能带负号!

    输入输出格式

    输入格式:

    两个数两行

    A B

    输出格式:

    五个数

    和 差 积 商 余

    输入输出样例

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

    说明

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

    A,B>0 每个点3s。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1000005;
    int a[maxn],b[maxn],d[maxn],c[maxn],f,q,flag;
    string s1,s2;
    void init(){
    
        cin>>s1>>s2;
        if(s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2))
            swap(s1, s2),flag = 1;
        if(s2.size() < 8){
            f = 1;
            for(int i = 0; i < s2.size(); i++)
                q = q*10 + s2[i]-'0';
        }
        a[0] = s1.size() , b[0] = s2.size();    
        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';
        
    }
    
    void print(int k){
        if(k == 1)printf("-");        
        for(int i = c[0]; i >= 1; i--)
            printf("%d",c[i]);
        cout<<endl;
        memset(c, 0, sizeof(c));
    }
    int cmp(){
        if(a[0] < b[0])return 0;
        if(a[0] > b[0])return 1;
        int i;
        for(i = a[0]; i >= 1; i--)
            if(a[i] != b[i])return a[i] > b[i];
        return 1;
    }
    void isjia(){
        c[0] = a[0] + 1;
        for(int i = 1; i <= c[0]; i++){
            c[i] += a[i] + b[i];
            c[i + 1] = c[i] / 10;
            c[i] %= 10;
        }
        while(c[0] > 1 && !c[c[0]])c[0]--;
        print(0);
    }
    
    void isjian(){
        memset(c,0,sizeof(c));
        c[0] = a[0];
        
        for(int i = 1; i <= c[0]; i++){
            c[i] += a[i] - b[i];
            if(c[i] < 0)c[i] += 10, c[i + 1]--;
        }
        while(c[0] > 1 && !c[c[0]])c[0]--;
    }
    
    void ischeng(){
        c[0] = a[0] + b[0] + 1;
        for(int i = 1; i <= a[0]; i++){
            int x = 0;
            for(int j = 1; j <= b[0]; j++){
                c[i + j - 1] += x + a[i]*b[j];
                x = c[i + j - 1]/10;
                c[i + j - 1] %= 10;
            }
            c[i + b[0]] = x;
        }
        while(c[0] > 1 && !c[c[0]])c[0]--;
    }
    void moni(){
        memset(c, 0, sizeof(c));
        int x = 0;
        for(int i = a[0]; i >= 1; i--){
            c[i] = (10*x + a[i])/q;
            x = (x*10 +a[i])% q;
        }
        
        c[0] = a[0];
        while(c[0] > 1 && !c[c[0]])c[0]--;
        print(0);
        cout<<x;
    }
    void ismod(){
        int cnt = 0;
        if(f){
            moni();return ;
        }
        while(1){
            if(!cmp())break;
            cnt++;
            isjian();
            for(int i = 0; i <= c[0]; i++)
                a[i] = c[i];
            
        }
        cout<<cnt<<endl;
        print(0);    
    }
    
    int main(){
        init();
        isjia();    
        isjian();
        print(flag);
        ischeng();
        print(0);
        if(!flag)ismod();
        else {
            cout<<"0"<<endl;
            for(int i = b[0]; i >= 1; i--)
            cout<<b[i];
        }
    }

    TLE两个点,先放出来吧

  • 相关阅读:
    Go HTTP Client 持久连接
    监控指标go.mongodb.org/mongodriver的prometheus
    Mybatis拦截器自定义prometheus监控指标
    Springboot开启prometheus监控指标获取HTTP请求的吞吐时延等
    Golang 环境变量详解
    Navicat
    springboot单元测试常用写法
    golang枚举值定义
    java 实现 类似 reids nx锁 , 模拟秒杀操作
    分布式幂等1(基于一次性token) 自定义接口幂等(注解) @AvoidResubmit(isLoc = false)
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/8406566.html
Copyright © 2020-2023  润新知