posts - 21, comments - 2, trackbacks - 0, articles - 0

POJ 2273 An Excel-lent Problem

Posted on 2011-09-05 21:53 acpeng 阅读(440) 评论(0)  编辑 收藏 引用 所属分类: ACM程序

把整数转化为excel对应的列值http://poj.org/problem?id=2273
Description

A certain spreadsheet program labels the columns of a spreadsheet using letters. Column 1 is labeled as ``A", column 2 as ``B", ..., column 26 as ``Z". When the number of columns is greater than 26, another letter is used. For example, column 27 is ``AA", column 28 is ``AB" and column 52 is ``AZ". It follows that column 53 would be ``BA" and so on. Similarly, when column ``ZZ" is reached, the next column would be ``AAA", then ``AAB" and so on.

The rows in the spreadsheet are labeled using the row number. Rows start at 1.

The designation for a particular cell within the spreadsheet is created by combining the column label with the row label. For example, the upper-left most cell would be ``A1". The cell at column 55 row 23 would be ``BC23".

You will write a program that converts numeric row and column values into the spreadsheet designation.

Input

Input consists of lines of the form: RnCm. n represents the row number [1,300000000] and m represents the column number, 1<=m<=300000000. The values n and m define a single cell on the spreadsheet. Input terminates with the line: R0C0 (that is, n and m are 0). There will be no leading zeroes or extra spaces in the input.

Output

For each line of input (except the terminating line), you will print out the spreadsheet designation for the specified cell as described above.

Sample Input

R1C1
R3C1
R1C3
R299999999C26
R52C52
R53C17576
R53C17602
R0C0

Sample Output

A1
A3
C1
Z299999999
AZ52
YYZ53
YZZ53

Source

Greater New York 2004

进制转化问题,把列数改成26进制输出,分别用A,B...Z代替1,2,3...这里base[0]='Z',表示n与26余数为0时的取值,但进位问题需要注意,分余数是否为0两种情况分析。
代码:
#include<stdio.h>
#define R 26
char base[30]="ZABCDEFGHIJKLMNOPQRSTUVWXYZ";
void fun(int N)
{
    
int i=0,j; char str[10];
    
while(N>R)
    
{
        str[i
++]=base[N%R];
        N
=N%R==0?N/R-1:N/R;
    }

    str[i]
=base[N];
    
for(j=i;j>=0;j--)
        printf(
"%c",str[j]);
}

int main()
{
    
int m,n;
    
while(scanf("%*c%d%*c%d",&m,&n)!=EOF)
    
{
        getchar();
        
if(m==0 && n==0)break;
        fun(n);
        printf(
"%d\n",m);
    }

    
return 0;
}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理