HDU5237- Base64
来源:互联网 发布:java主方法入口 编辑:程序博客网 时间:2024/06/12 00:13
一道比较显而易见的模拟题,相对而言字符串处理对我更难一些。。
有点像之前某校校赛现场做的一道题,完成MD5的解密过程
只需要实现将原字符串每三字节24位重新切分为4个6位,然后从表里转换为对应的BASE64码即可,不足三字节的用0补满至下一个6位(即剩一个字节补4个0补成12位,剩下两个字节补2个0补成18位),然后用'='补齐剩下的空位即可。
代码:(对字符串的处理很丑。。。见谅)
#include<iostream>#include<cstdio>#include<string.h>using namespace std;char S[1000],Q[1000];char Std[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";void Make(int x){ Q[strlen(Q)]=Std[x];}void f(int n) //以二进制方式输出整数n{ if(n) f(n/2); else return; printf("%d",n%2); } int main(){ int t,tm; scanf("%d",&tm);t=tm; while(t--) { int k,i,n; scanf("%d %s",&n,S); while(n--) { memset(Q,0,sizeof(Q)); int l=strlen(S); for(i=0;i<l;i++) { if(i%3==0) Make(S[i]/4); if(i%3==1) Make((S[i-1]%4)*16+S[i]/16); if(i%3==2) { Make((S[i-1]%16)*4+S[i]/64); Make(S[i]%64); } } if(l%3) { int key=(S[l-1]%4)*16; if(l%3==2) key=(S[l-1]%16)*4; Make(key); strcat(Q,"="); if(l%3==1) strcat(Q,"="); } Q[strlen(Q)]='\0'; strcpy(S,Q); } printf("Case #%d: %s\n",tm-t,S); } return 0;}
0 0
- HDU5237- Base64
- HDU5237 Base64 大模拟
- hdu5237 Base64(模拟)
- hdu5237-字符串模拟&细节-Base64
- base64
- BASE64
- Base64
- BASE64
- Base64
- Base64
- base64
- base64
- base64
- base64
- base64
- Base64
- base64
- base64
- 用正则表达式选出字符串中的数字
- 黑马程序员——java基础String类
- boost install
- iOS - 需求 - 微信扫描二维码支付(草稿)
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- HDU5237- Base64
- 物流运交管理系统 MVC框架的搭建(一)
- jmeter源码编译(eclipse)
- loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法
- spring batch admin 嵌入web访问
- 【爱分享,爱Java】一个java程序员给新入行师弟师妹的一些建议
- VC里的编码问题
- 提高篇第20-21课第三题
- 旋转数组的最小数字