这道题理解题意很重要,首先对所有的字符三个三个进行转换,然后对于剩下的余数:如果余一个字符,就将这个字符转化为8位数二进制数,然后补16个0,取转换后的前两个字符,最后加两个=;如果余两个字符,就将这两个字符转换成8位数的二进制数,然后补8个0,取转换后的前三个字符,最后加一个=

数组大小最大开到10的6次方,10000也可以,再大就超内存了

输出的Case的那一行后面没有换行

 
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char ch[1000000];
char ch1[1000000];
int s[1000000];
void f(char ch,int i)
{
    while(ch)
    {
        if(ch>=128)
        {
            s[i*8+0]=1;
            ch-=128;
        }
        else if(ch>=64)
        {
            s[i*8+1]=1;
            ch-=64;
        }
        else if(ch>=32)
        {
            s[i*8+2]=1;
            ch-=32;
        }
        else if(ch>=16)
        {
            s[i*8+3]=1;
            ch-=16;
        }
        else if(ch>=8)
        {
            s[i*8+4]=1;
            ch-=8;
        }
        else if(ch>=4)
        {
            s[i*8+5]=1;
            ch-=4;
        }
        else if(ch>=2)
        {
            s[i*8+6]=1;
            ch-=2;
        }
        else if(ch==1)
        {
            s[i*8+7]=1;
            ch-=1;
        }
    }
}

int fun(int i)
{
    int sum=0;
    sum+=s[i*6+0]*32;
    sum+=s[i*6+1]*16;
    sum+=s[i*6+2]*8;
    sum+=s[i*6+3]*4;
    sum+=s[i*6+4]*2;
    sum+=s[i*6+5];
    return sum;
}
char e[200]= {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
int main()
{
    int t,cas;
    int i,j,l;
    int k,o,w;
    scanf("%d",&t);
    for(cas=1; cas<=t; cas++)
    {
        memset(ch,0,sizeof(ch));
        scanf("%d%*c",&k);
        scanf("%s",ch);
        printf("Case #%d: ",cas);
        for(l=0; l<k; l++)
        {
            memset(s,0,sizeof(s));
            memset(ch1,0,sizeof(ch1));
            o=strlen(ch)/3;
            w=strlen(ch)%3;
            for(i=0; i<o*3; i++)
            {
                f(ch[i],i);
            }
            for(i=0; i<o*4; i++)
            {
                ch1[i]=e[fun(i)];
            }
            if(w==2)
            {
                f(ch[o*3],o*3);
                f(ch[o*3+1],o*3+1);
                for(i=0; i<8; i++)
                {
                    s[(o*3+2)*8+i]=0;
                }
                for(i=o*4; i<o*4+3; i++)
                {
                     ch1[i]=e[fun(i)];
                }
                ch1[i]='=';
            }
            if(w==1)
            {
                f(ch[o*3],o*3);
                for(i=0; i<16; i++)
                {
                    s[24*o+8+i]=0;
                }
                for(i=o*4; i<o*4+2; i++)
                {
                    ch1[i]=e[fun(i)];
                }
                ch1[i]='=';
                ch1[i+1]='=';
            }
            int len=strlen(ch1);
            for(i=0;i<len;i++)
            {
                ch[i]=ch1[i];
            }
        }
        printf("%s\n",ch);
    }
    return 0;
}