/*******
题目: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;
}
本文介绍了一道关于Base64编码与二进制及十进制之间转换的编程题目。主要内容包括如何将Base64编码字符串解码为二进制形式,并进一步转换为十进制数,最终实现字符输出的过程。文章还提到了处理特殊字符的方法。
575

被折叠的 条评论
为什么被折叠?



