【问题3】
本问题中,我们用以下的编码表示一定范围内的整数:
- 10〜35:以大写英文字母A至Z表示;
- 0〜9:以字符’0’至’9’表示;
- -1〜-10:分别以!@#$%?&*()表示;
- -11〜-36:以小写英文字母a至z表示;
这样一来,这些整数均可以由单个字符表示。
如,数列[0,35,18, 2]便可表示为0Zh@。
前者书写时需要8个字符(不含括号、逗号),后者只需4个字符。
上山容易下山难。你在自己的硬盘里翻出了一段以这种格式编码的数据,你希望将这些数据复原。
请编写程序完成这件事。
【输入形式】
输入一行,是一个字符串,表示压缩后的数据。该字符串满足以下三个条件:
(1)不为空。
(2)仅包含题目中的编码字符。
(3)长度不超过10000。
【输岀形式】
输出共2行。
第一行1个正整数n,表示数据个数。
第二行n个以空格分隔的整数a1,a2,…,an,表示复原的结果。
【样例输入】
0Zh@
【样例输出】
4
0 35 -18 -2
【样例说明】
字符串长度为4,对应编码4个数字,第一行输出4。
第二行依次输出4个整数,空格分隔:第一个字符0对应数字0,第二个大写字母Z对应35,第三个小写字母h对应-18,最后的@对应-2 。
【评分标准】
根据输入要求输出指定的结果,提交程序名为:code.c。
暴力代码:
#include<stdio.h>
int turn(char x){switch(x){case 'A':return 10;break;case 'B':return 11;break;case 'C':return 12;break;case 'D':return 13;break;case 'E':return 14;break;case 'F':return 15;break;case 'G':return 16;break;case 'H':return 17;break;case 'I':return 18;break;case 'J':return 19;break;case 'K':return 20;break;case 'L':return 21;break;case 'M':return 22;break;case 'N':return 23;break;case 'O':return 24;break;case 'P':return 25;break;case 'Q':return 26;break;case 'R':return 27;break;case 'S':return 28;break;case 'T':return 29;break;case 'U':return 30;break;case 'V':return 31;break;case 'W':return 32;break;case 'X':return 33;break;case 'Y':return 34;break;case 'Z':return 35;break;case '0':return 0;break;case '1':return 1;break;case '2':return 2;break;case '3':return 3;break;case '4':return 4;break;case '5':return 5;break;case '6':return 6;break;case '7':return 7;break;case '8':return 8;break;case '9':return 9;break;case '!':return -1;break;case '@':return -2;break;case '#':return -3;break;case '$':return -4;break;case '%':return -5;break;case '?':return -6;break;case '&':return -7;break;case '*':return -8;break;case '(':return -9;break;case ')':return -10;break;case 'a':return -11;break;case 'b':return -12;break;case 'c':return -13;break;case 'd':return -14;break;case 'e':return -15;break;case 'f':return -16;break;case 'g':return -17;break;case 'h':return -18;break;case 'i':return -19;break;case 'j':return -20;break;case 'k':return -21;break;case 'l':return -22;break;case 'm':return -23;break;case 'n':return -24;break;case 'o':return -25;break;case 'p':return -26;break;case 'q':return -27;break;case 'r':return -28;break;case 's':return -29;break;case 't':return -30;break;case 'u':return -31;break;case 'v':return -32;break;case 'w':return -33;break;case 'x':return -34;break;case 'y':return -35;break;case 'z':return -36;break;}
}
int main(){char c[10000]={'0'};int sum=0;scanf("%s",&c);int end[10000]={0}; while(c[sum]!='\0'){//记住符号串结尾是\0;end[sum]=turn(c[sum]);sum++;}printf("%d\n",sum);for(int i=0;i<sum;i++){printf("%d ",end[i]);}
}