zoukankan      html  css  js  c++  java
  • 第四届河南省程序设计大赛:序号互换 (进制转换)

    http://nyoj.top/problem/303

    题目描述:

    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

    解题思路:

    26进制转换问题。

    #include <stdio.h>
    #include <string.h>
    #define N 120
    char str[N];
    int ans[N];
    int main()
    {
    	int n,i,j,len,sum;
    	scanf("%d", &n);
    	while(n--)
    	{
    		scanf("%s", str);
    		len=strlen(str);
    		if(str[0] >= '0' && str[0] <= '9'){
    			sum = 0;
    			for(i=0; i<len; i++)
    				sum=sum*10 + str[i] - '0';
    			j=0;
    			while(sum)
    			{
    				ans[j] = (sum-1) % 26 + 1;
    				sum = (sum-1)/26;
    				j++;
    			}	
    			for(j--; j>=0; j--)
    				printf("%c", ans[j] + 'A' -1);
    			printf("
    ");	
    		}
    		else{
    			sum = 0;
    			for(i=0; i<len; i++)
    				sum = sum * 26 + str[i] - 'A' +1;
    			printf("%d
    ", sum);
    		}
    	}
    	return 0;
    } 
  • 相关阅读:
    Python笔记 —— 使用open打开和操作txt文件
    Python笔记 —— 文件路径
    Python笔记 —— 四种容器(列表,元组,字典,集合)
    C++笔记 —— 异常
    C++笔记 —— map常用方法
    C++笔记 —— 在模板类中重载操作符
    C++笔记 —— vector常用方法
    C++笔记 —— 强制类型转换
    TCP连接三次握手四次挥手
    HashMap中自定义对象key,实现hashcode与equal
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852763.html
Copyright © 2011-2022 走看看