2011 ACMアジア予選大会大連駅現場戦D題Hexadecimal View

1731 ワード

テーマリンク: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
",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
",des+1); } return 0; }