/*******
题目:I. 编码
链接:http://acm.bnu.edu.cn/v3/contest_show.php?cid=6068#problem/I
题意:二进制与十进制之间的转换。
思路:将所给的字符串进行解码,转换成编码,存入数组中,在进行二进制转换,然后二进制数每八个一组转换为十进制,再将其用字符输出即可。
问题:题目中的‘=’号的编码和‘A’的相同。在解码时应该考虑‘=’的问题。但当时由于时间问题,没能过多的思考,提交后也过了。
*******/
#include <stdio.h>
#include <string.h>
#include <math.h>
int
main()
{
char
a[1003];
char
ans[2000];
int
b[8000],k[800];
scanf
(
"%s"
,a);
int
i,t,tag,x,j;
int
w,ss;
t=
strlen
(a);
tag=0;
for
(i=0; i<t; i++)
{
if
(a[i]>=
'A'
&&a[i]<=
'Z'
)
k[tag]=a[i]-
'A'
;
else
if
(a[i]>=
'a'
&&a[i]<=
'z'
)
k[tag]=a[i]-
'a'
+26;
else
if
(a[i]==
'='
)
k[tag]=a[i]-
'='
;
else
if
(a[i]>=
'0'
&&a[i]<=
'9'
)
k[tag]=a[i]-
'0'
+52;
else
if
(a[i]==
'+'
)
k[tag]=a[i]-
'+'
+62;
else
if
(a[i]==
'/'
)
k[tag]=a[i]-
'/'
+63;
//printf("%d ",k[tag]);
tag++;
}
x=0;
for
(i=0; i<tag; i++)
{
w=k[i];
for
(j=x+5; j>=x; j--)
{
b[j]=w%2;
//将编码转化为二进制并储存在数组b中
w=w/2;
}
x+=6;
//每六个为一组
}
ss=0;
for
(i=0; i<x-6; )
{
ans[ss]=0;
for
(j=7; j>=0; j--)
{
ans[ss]+=b[i]*
pow
(2,j);
//将2进制转化为10进制,并存入ans数组中
//printf("%d ",ans[ss]);
//printf("%d",b[i]);
i++;
}
//printf("\n%d\n",ans[ss]);
ss++;
// 每8个二进制数对应一位编码
}
printf
(
"%s\n"
,ans);
return
0;
}