zoukankan      html  css  js  c++  java
  • 历届试题 Excel地址

    问题描述
      Excel单元格的地址表示很有趣,它使用字母来表示列号。
      比如,
      A表示第1列,
      B表示第2列,
      Z表示第26列,
      AA表示第27列,
      AB表示第28列,
      BA表示第53列,
      ....


      当然Excel的最大列号是有限度的,所以转换起来不难。
      如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?


      本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
    样例输入
    26
    样例输出
    Z
    样例输入
    2054
    样例输出
    BZZ
    数据规模和约定
      我们约定,输入的整数范围[1,2147483647]
    题目分析
      这个题有点像进制转换,但是又有不同,不同之处在于,他没有‘0’。
      举个例子,1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24……
      上面的例子,他没有含有0的任何数字。
      第一步:我们先把9变成九进制  10
      第二步:如果某位数字为0,那么则向前借位,10就变成了09
      那么答案就是9
      对应到我们这个题上,无非就是九进制变成了二十六进制。
      
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <vector>
    #include <stdlib.h>
    #include <cstdlib>
    #include <string.h>
    #include <string>
    #include <cmath>
    #include <map>
    using namespace std;
    int n;
    char s[1000];
    int main() {
        cin >> n;
        _itoa(n, s, 26);//转换进制
        for (int i = 0; s[i] != ''; i++) {//把字母变成数字
            if (s[i] <= 'z'&&s[i] >= 'a') {
                s[i] = s[i] - 'a' + 10 + '0';
            }
        }
        int len = strlen(s);
        for (int i = len - 1; i >= 0; i--) {
            if (s[i] - '0' <= 0 && i != 0)
                s[i - 1] -= 1, s[i] += 26;
            if (s[i] - '0' > 0)
                s[i] += 'A' - '0' - 1;
        }
        char *p = s;
        while (*p - '0' <= 0)//找到第一位非0数字
            p++;
        cout << p;
        return 0;
    }
  • 相关阅读:
    Apache+PHP多端口多站点
    异步将远程链接上的内容(图片或内容)写到本地--微信头像
    如何判断微信内置浏览器(JS & PHP)
    阿里大于(阿里大鱼)短信发送
    商城分类表-二级,内容较全
    ajax省市县三级联动
    html5自带表单验证-美化改造
    thinkphp使用自定义类方法
    thinkphp模板中for循环与switch的使用
    css揭秘之按钮的实现技巧
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10464358.html
Copyright © 2011-2022 走看看