程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NYOJ 303 序號互換

NYOJ 303 序號互換

編輯:C++入門知識

序號互換

時間限制: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
來源
第四屆河南省程序設計大賽

數字換字母是26進制,但A--Z沒有0,所以每次轉換時要減一。

#include"stdio.h"
#include"math.h"
#include"string.h"
#define N 50
void digit(char *s)
{
	int i,a=0;
	char ans[N];
	for(i=0,a=0;s[i]!='\0';i++)
	{
		a*=10;
		a+=s[i]-'0';
	}
	int k=0;
	while(a)
	{
		ans[k++]=(a-1)%26+'A';
		a=(a-1)/26;
	}
	for(i=k-1;i>=0;i--)
		printf("%c",ans[i]);
	printf("\n");
}
int main()
{
	int T;
	char str[N];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s",str);
		if(str[0]>='0'&&str[0]<='9')
			digit(str);        //數字換字母
		else                    //字母換數字
		{      
			int a=0,i;
			for(i=0;str[i]!='\0';i++)
			{
				a*=26;
				a+=str[i]-'A'+1;
			}
			printf("%d\n",a);
		}           
	}
	return 0;
}



自己調試的這種居然也過了,還沒想通。。

 
#include"stdio.h"
#include"math.h"
#include"string.h"
#define N 50
void digit(char *s)
{
	int i,a,n;
	char ans[N];
	n=strlen(s);
	for(i=0,a=0;i=0;i--)
		printf("%c",ans[i]);
	printf("\n");
}
void letter(char *s)
{
	int i,a=0,n;
	n=strlen(s);
	for(i=0;i='0'&&str[0]<='9')
			digit(str);        //數字換字母
		else
			letter(str);
	}

	return 0;
}        






  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved