ZCMU - 2158: G.ly的进制转换

简介: ZCMU - 2158: G.ly的进制转换

题目链接


题目大意:略。

解题思路:先整合16 To 2进制,注意补位为3的倍数(8进制),然后循环 i+=3 来跑完,前导0省略。

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
using namespace std;
typedef long long ll;
const int mlen=100000+100;
char a[mlen];
int main()
{
//    const string letrr[6]={"1010","1011","1100","1101","1110","1111"};
//    const string numrr[10]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001"};
    int T; scanf("%d",&T);
    T>10?T=10:T;
    while(T-- && ~scanf("%s",a))
    {
        string txt;
        int len=strlen(a);
        int t=len*4%3,tlen=0;
        if(t==0) txt="";
        else if(t==1) txt="00",tlen=2;
        else if(t==2) txt="0",tlen=1;
        for(int i=0;i<len;i++) // 这里不要用 a[i]-'0' 操作,会TLE,因为数据量太大
        {
            switch(a[i])
            {
                case '0':txt+="0000";break;
                case '1':txt+="0001";break;
                case '2':txt+="0010";break;
                case '3':txt+="0011";break;
                case '4':txt+="0100";break;
                case '5':txt+="0101";break;
                case '6':txt+="0110";break;
                case '7':txt+="0111";break;
                case '8':txt+="1000";break;
                case '9':txt+="1001";break;
                case 'A':txt+="1010";break;
                case 'B':txt+="1011";break;
                case 'C':txt+="1100";break;
                case 'D':txt+="1101";break;
                case 'E':txt+="1110";break;
                case 'F':txt+="1111";break;
            }
        }
        len=len*4+tlen;
        for(int i=0;i<len;i+=3)
        {
            if(txt[i]=='0'&&txt[i+1]=='0'&&txt[i+2]=='0')
            {
                if(i==0) continue;
                else printf("0");
            }
            else if(txt[i]=='0'&&txt[i+1]=='0'&&txt[i+2]=='1') printf("1");
            else if(txt[i]=='0'&&txt[i+1]=='1'&&txt[i+2]=='0') printf("2");
            else if(txt[i]=='0'&&txt[i+1]=='1'&&txt[i+2]=='1') printf("3");
            else if(txt[i]=='1'&&txt[i+1]=='0'&&txt[i+2]=='0') printf("4");
            else if(txt[i]=='1'&&txt[i+1]=='0'&&txt[i+2]=='1') printf("5");
            else if(txt[i]=='1'&&txt[i+1]=='1'&&txt[i+2]=='0') printf("6");
            else if(txt[i]=='1'&&txt[i+1]=='1'&&txt[i+2]=='1') printf("7");
        }
        puts("");
    }
    return 0;
}
目录
相关文章
|
存储 C++
C++-十进制转二进制(matlab-dec2bin函数)
C++-十进制转二进制(matlab-dec2bin函数)
126 0
|
7月前
|
存储 安全 程序员
C/C++中的整数乘法运算与汇编指令MUL和IMUL
C/C++中的整数乘法运算与汇编指令MUL和IMUL
162 0
零基础VB教程062期:常用数学函数第二节 弧度、进制转换、hex/oct/round/fix/sqr等
零基础VB教程062期:常用数学函数第二节 弧度、进制转换、hex/oct/round/fix/sqr等
|
开发工具
5分钟从掌握到精通---进制转化
🍀掌握进制间互相转换🍀
589 0
5分钟从掌握到精通---进制转化
|
人工智能 BI
CF1169C. Increasing by Modulo(二分)
CF1169C. Increasing by Modulo(二分)
135 0
PAT乙级(进制转换) 1022、1037
PAT乙级(进制转换) 1022、1037
94 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
【欧拉计划第 5 题】最小公倍数 Smallest multiple
162 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
|
人工智能
Kuroni and Impossible Calculation——容斥原理-鸽笼原理-抽屉原理
题目描述 已知一个数组a[n],请计算式子:∏_{1≤i<j≤n}|ai−aj| 的值,其中1<=i,j<=n;我们可以认为,这一式子等价于 |a1−a2|⋅|a1−a3|⋅ … ⋅|a1−an|⋅|a2−a3|⋅|a2−a4|⋅ … ⋅|a2−an|⋅ … ⋅|an−1−an|
126 0
Kuroni and Impossible Calculation——容斥原理-鸽笼原理-抽屉原理
|
Python
ZZULIOJ-1005,整数幂(Python)
ZZULIOJ-1005,整数幂(Python)
base -2 Number——进制转换
题目描述 Given an integer N, find the base −2 representation of N. Here, S is the base −2 representation of N when the following are all satisfied: S is a string consisting of 0 and 1. Unless S= 0, the initial character of S is 1. Let S=SkSk−1…S0, then S0×(−2)0+S1×(−2)1+…+Sk×(−2)k=N.
121 0