• NYOJ 303 序号互换(规律)河南第四届ACM省赛


    序号互换

    时间限制:1000 ms  |  内存限制:65535 KB

    难度:2

    描述

    Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来。单元格的行坐标是由数字编号的数字序号,而列坐标使用字母序号。观察字母序号,发现第1列到第26列的字母序号分别为A,B,…,Z,接着,第27列序号为AA,第28列为AB,依此类推。

    若给Dr.Kong的机器人卡多一个数字序号(比如32),它能很快算出等价的字母序号(即AF),若给机器人一个字母序号(比如AA)),它也能很快算出等价的数字序号(27),你能不能与卡多比试比试,看谁能算得更快更准确。

    输入

    第一行: N 表示有多少组测试数据。 
    接下来有N行, 每行或者是一个正整数,或者是一个仅由大写字母组成的字符串。
    输入保证,所有数字序号和字母序号对应的数字序号均 ≤ 2*10^9

    输出

    对于每一行测试数据,输出一行。如果输入为一个正整数序号,则输出等价的字母序号;如果输入为字符串,则输出等价的数字序号。

    样例输入

    3
    27
    G
    AA

    样例输出

    AA
    7
    27

    来源

    第四届河南省程序设计大赛

     解题报告:这道题是一道找规律的题,字母到数字或数字到字符的转化,感觉挺像进制转换的,

    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    const int MAX = 5010;
    int N, len;
    char str[MAX];
    void Isnum()
    {
        int i, num, count;
        char ans[MAX];
        num = 0;
        for (i = 0; i < len; ++ i)//把字符串先转换成数字
        {
            num = num * 10 + str[i] - '0';
        }
        count = 0;//存储转变成字母需要的位数
        while (num)
        {
            if (num % 26)
            {
                ans[count] = num % 26 + 'A' - 1;
                num = num / 26;
            }
            else
            {
                ans[count] = 'Z';
                num = num / 26 - 1;
            }
            count ++;//位数加一
        }
        for (i = count - 1; i >= 0; --i)//输出结果
        {
            printf("%c", ans[i]);
        }
        printf("\n");
    }
    void Ischar()
    {
        int i, ans;
        ans = 0;
        for (i = len - 1; i >= 0; -- i)//将字符转化成数字
        {
            ans += (str[i] - 'A' + 1) * pow(26, len - i - 1);
            
        }
        printf("%d\n", ans);
    }
    int main()
    {
        scanf("%d", &N);
        while (N --)
        {
            getchar();
            scanf("%s", str);
            len = strlen(str);
            if (str[0] >= '0' && str[0] <= '9')
            {
                Isnum();//是数字的情况下
            }
            else if (str[0] >= 'A' && str[0] <= 'Z')
            {
                Ischar();//是字符的情况下
            }
        }
        return 0;
    }
            
    
        
  • 相关阅读:
    程序员必定会爱上的10款软件(转)
    用代码来细说Csrf漏洞危害以及防御
    UPX源码分析——加壳篇
    从零开始学习渗透Node.js应用程序
    自己动手python打造渗透工具集
    国内国外最好的java开发论坛及站点 [转]
    运维无小事之一次导致数据丢失的小变更
    使用python及工具包进行简单的验证码识别
    浅析企业安全中账户安全 的重要性
    全世界最顶级黑客同时沸腾在DEF CON 25,是怎样一种体验?
  • 原文地址:https://www.cnblogs.com/lidaojian/p/2469078.html
Copyright © 2020-2023  润新知