zoukankan      html  css  js  c++  java
  • Lovekey http://acm.hdu.edu.cn/showproblem.php?pid=2100

    Lovekey

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4729    Accepted Submission(s): 1525

    Problem Description
    XYZ-26进制数是一个每位都是大写字母的数字。 A、B、C、…、X、Y、Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3…An-1 的每一位代表的数字为a0a1a2a3…an-1 ,则该XYZ-26进制数的10进制值就为 
    m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1 
    一天vivi忽然玩起了浪漫,要躲在学校的一个教室,让枫冰叶子去找,当然,她也知道枫冰叶子可不是路痴,于是找到了XYZ的小虾和水域浪子帮忙,他们会在vivi藏的教室的门口,分别写上一个XYZ-26进制数,分别为 a 和 b,并且在门锁上设置了密码。显然,只有找到密码才能打开锁,顺利进入教室。这组密码被XYZ的成员称为lovekey。庆幸的是,枫冰叶子知道lovekey是 a的10进制值与b的10进制值的和的XYZ-26进制形式。当然小虾和水域浪子也不想难为枫冰叶子,所以a 和 b 的位数都不会超过200位。 例如第一组测试数据  a = 0 * 26^5+0* 26^4+ 0* 26^3+ 0 *26^2 + 3*26 + 7 = 85 b = 1*26^2 + 2*26 + 4 = 732 则 a + b = 817 = BFL
     
    Input
    题目有多组测试数据。 每组测试数据包含两个值均为的XYZ-26进制数,每个数字的每位只包含大写字母,并且每个数字不超过200位。
     
    Output
    输出XYZ的lovekey,每组输出占一行。
     
    Sample Input
    AAAADH BCE DRW UHD D AAAAA
     
    Sample Output
    BFL XYZ D
     
    今天刚做的测试,就差了一分钟,最后没提交上。其实原理很简单,和大数相加差不多,就是使用26进制,字符和数字的转换就是利用+'A'和-‘A’。
    #include <stdio.h>
    #include <string.h>
    #define MAX_LEN 200
    int an1[MAX_LEN+10];
    int an2[MAX_LEN+10];
    char szLine1[MAX_LEN+10];
    char szLine2[MAX_LEN+10];
    int main(void)
    {
        while(scanf("%s %s", szLine1,szLine2)!=EOF)
        {
            int i, j,nLen1 ,nLen2;
            memset( an1, 0, sizeof(an1));
            memset( an2, 0, sizeof(an2));
            nLen1 = strlen( szLine1);
            for( j = 0, i = nLen1 - 1;i >= 0 ; i --)
                an1[j++] = szLine1[i] - 'A';
            nLen2 = strlen(szLine2);
            for( j = 0, i = nLen2 - 1;i >= 0 ; i --)
                an2[j++] = szLine2[i] - 'A';
            for( i = 0;i < MAX_LEN ; i ++ ) 
            {  an1[i] += an2[i]; //逐位相加
                if( an1[i] >= 26 ) 
                { //看是否要进位
                    an1[i] -= 26;
                    an1[i+1] ++; //进位
                }
            }
            for( i = MAX_LEN; (i >= 0) && (an1[i]==0); i -- ) ;
            if(i>=0)
                for( ; i >= 0; i--)
                    printf("%c", an1[i]+'A');
            else      printf("A");
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/wangyouxuan/p/3235191.html
Copyright © 2011-2022 走看看