您的位置:首页 > 其它

2011 ACM亚洲预选赛大连站 现场赛 D题 Hexadecimal View

2011-10-02 15:29 423 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=4487

题目类型:一个灵活运用printf的水题。

不解释

代码:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

char str[5005];
char des[24];

char tran(char c)
{
    char ch=c;
    if ('a'<=c&&c<='z')
    {
        ch=c-'a'+'A';
    }
    else if ('A'<=c&&c<='Z')
    {
        ch=c-'A'+'a';
    }
    return ch;
}

int main()
{
    while (gets(str+1))
    {
        int a=0;
        int len=strlen(str+1);
        int lim=len/16;
        int mark=len%16;
        for (int k=1;k<=lim;k++)//先处理前面为整16字符的
        {
            printf("%04x: ",a+(k-1)*16);
            int j=1;
            for (int i=(k-1)*16+1;i<=(k-1)*16+16;i++)
            {
                printf("%x",str[i]);
                if (!(i&1))printf(" ");
                des[j++]=tran(str[i]);
                if (i%16==0)
                {
                    printf("%s\n",des+1);
                }
            }
        }
        if (mark==0)continue;
        printf("%04x: ",a+lim*16);//向下为处理后面剩余的字符(不足16个)
        int l=1;
        int i;
        for (i=lim*16+1;str[i]!='\0';++i)
        {
            printf("%x",str[i]);
            des[l++]=tran(str[i]);
            if (!(i&1))printf(" ");
        }
        des[l]='\0';
        for (int j=i;j<=lim*16+16;++j)
        {
            printf("  ");
            if (!(j&1))printf(" ");
        }
        printf("%s\n",des+1);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: