• 洛谷 P2104 二进制


    题目描述

    小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算:

    运算 1:将整个二进制数加 1

    运算 2:将整个二进制数减 1

    运算 3:将整个二进制数乘 2

    运算 4:将整个二进制数整除 2

    小Z很想知道运算后的结果,他只好向你求助。

    (Ps:为了简化问题,数据保证+,-操作不会导致最高位的进位与退位)

    输入输出格式

    输入格式:

     

    第一行两个正整数 n,m,表示原二进制数的长度以及运算数。

    接下来一行 n 个字符,分别为‘0’或‘1’表示这个二进制数。

    第三行 m 个字符,分别为‘+’,‘-’,‘*’,‘/’,对应运算 1,2,3,4。

     

    输出格式:

     

    一行若干个字符,表示经过运算后的二进制数。

     

    输入输出样例

    输入样例#1: 复制
    4 10
    1101
    */-*-*-/*/
    输出样例#1: 复制
    10110

    说明

    【数据规模和约定】

    对于 30%的数据,1 ≤ n,m ≤ 1000。

    对于 60%的数据,1 ≤ n,m ≤ 10^5。

    对于 100%的数据,1 ≤ n,m ≤ 5*10^6。

    【时空限制】

    2s/128M

    思路:模拟。

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int n,m;
    char a[10000000],b[10000000];
    int main(){
        scanf("%d%d",&n,&m);
        scanf("%s%s",a,b);
        n--;
        for(int i=0;i<m;i++){
            if(b[i]=='+'){
                int x=n;
                a[n]++;
                while(a[x]==50){ a[x]=48;a[x-1]+=1;x--; }            
            }
            if(b[i]=='-'){
                int x=n;
                if(a[n]==49)    a[n]=48;
                else while(a[x]==48){ a[x]=49;x--; }
                a[x]=48;
            }
            if(b[i]=='*'){    n++;a[n]=48; }
            if(b[i]=='/')    n--;
        }
        for(int i=0;i<=n;i++)    printf("%c",a[i]);
        cout<<endl;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    django中函数之间的关系
    文件文本的操作
    边框宽度 边框圆角 边框颜色
    nstimer实现倒计时
    用nstimer实现倒计时
    IOS常用宏定义
    计算文字的Size
    判断UITableView滚动是否到底
    设置Label行间距
    UIAlertView 提示弹窗
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8045064.html
Copyright © 2020-2023  润新知