zoukankan      html  css  js  c++  java
  • [洛谷P3982]龙盘雪峰信息解析器

    题目大意:给你一串代码,要求进行解码。解码规则详见题目。

    解题思路:这是一道字符串处理的题目。

    首先,有这么几种情况输出Error:

    1.代码中出现除了0和1外的字符。

    2.代码长度不是8的倍数。

    3.在输出字母时发现转化后的数字大于25。

    4.进行加法时,第二个数不是一个数单元。

    其余情况均能解码。解码时转化一下即可。

    答案输出的技巧:本题如果一个操作一个操作输出,可能遇到输出到一半发现Error的情况。解决方案是把答案存在一个字符串当中,最后整个字符串输出即可。

    C++ Code:

    #include<cstdio>
    #include<cstdlib>
    #include<string>
    #include<cstring>
    using std::string;
    char buf[171118],s[11];
    int bufpos;
    string ans;
    inline void error(){puts("Error");exit(0);}
    inline void get(char* s){for(int i=0;i<8;++i,++bufpos)*s++=buf[bufpos];}
    int main(){
    	ans="";
    	scanf("%s",buf);
    	for(int i=0;buf[i];++i)if(buf[i]!='0'&&buf[i]!='1')error();
    	if(strlen(buf)%8)error();
    	bufpos=0;
    	while(buf[bufpos]=='0'||buf[bufpos]=='1'){
    		get(s);
    		if(s[0]=='1'&&s[1]=='0'&&s[2]=='1'){
    			int p=0;
    			for(int i=7,j=1;i>2;--i,j<<=1)
    			p+=(s[i]-'0')*j;
    			if(p<26)ans+=(char)(p+'A');else error();
    		}else
    		if(s[0]=='1'&&s[1]=='1'&&s[2]=='1')ans+=' ';else
    		if(s[0]=='0'){
    			int p=0,pp;
    			for(int i=7,j=1;i;--i,j<<=1)
    			p+=(s[i]-'0')*j;
    			pp=p>>1;p=0;
    			if(buf[bufpos]!='0')error();
    			get(s);
    			for(int i=7,j=1;i;--i,j<<=1)
    			p+=(s[i]-'0')*j;
    			p>>=1;p+=pp;
    			if(p==0)ans+='0';else{
    				int w=1;
    				for(;w<=p;w*=10);
    				for(w/=10;w;w/=10)ans+=(char)((p/w)^'0'),p%=w;
    			}
    		}
    	}
    	printf("%s
    ",ans.c_str());
    	return 0;
    }
    
  • 相关阅读:
    Qt 学习之路 2(39):遍历容器
    Qt 学习之路 2(38):存储容器
    JS 格式化日期
    springboot 核心注解
    Java 生成随机数 Random、SecurityRandom、ThreadLocalRandom、Math.random()
    验证码 easy_captcha
    读过的书籍
    typora 常用快捷键
    kafka 遇到的问题
    老男孩Linux 运维
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7905583.html
Copyright © 2011-2022 走看看