码迷,mamicode.com
首页 > 其他好文 > 详细

CODEFORCES 1B Spreadsheets

时间:2018-11-11 00:55:29      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:分享   none   void   play   open   i++   sizeof   style   pread   

技术分享图片

技术分享图片

一,题目大意:一个坐标有两种表示方法,一种是RXCy,表示第几行,第几列。另一种是字母加数字,例如BC34(表示55列34行,A表第1列,Z表第26列,AA表第27列)

       现给出n(1?≤?n?≤?10^5)个坐标的一种表示方法,求出它的另一种表示方法。

       PS:横/纵坐标的数字不超过10^6。

二,题目分析:当给出RxCy时,

       行数直接转就行了,难点在列数上。

       1.先将字符串转化成数字。

       2.再进制转换(但要注意26进制却没有0,这就需要额外特判(这想了我好久))

        {

          (1)进制转换用短除法。

          (2)需要判断几位数。

          (3)如果%的时候余0,须从下一次%出来的数上借一位。

        }

三,

技术分享图片
 1 #include <stdio.h>
 2 #include <string.h>
 3 int col,row;
 4 int sum[10];
 5 char str[15];
 6 int pd(int x)
 7 {
 8     int i=1;
 9     while(x>sum[i])i++;
10     return i;
11 }
12 void calc()
13 {
14     int i=1;
15     col=row=0;
16     while(str[i]>=A&&str[i]<=Z)col=(col<<4)+(col<<3)+(col<<1)+str[i++]-64;
17     while(str[i]>=0&&str[i]<=9)row=(row<<3)+(row<<1)+str[i++]-0;
18     printf("R%dC%d\n",row,col);
19 }
20 int main()
21 {
22     int n,len,i,j,k;
23     sum[1]=26;
24     for(i=2;i<=5;i++)sum[i]=(sum[i-1]+1)*26;
25     char pstr[15];
26     scanf("%d\n",&n);
27     while(n--)
28     {
29         memset(str,0,sizeof(str));
30         memset(pstr,0,sizeof(pstr));
31         scanf("%s",str+1);
32         if(str[1]==R)
33         {
34             j=2;row=0;
35             while(str[j]>=0&&str[j]<=9)
36             {
37                 row=(row<<1)+(row<<3)+str[j]-0;
38                 j++;
39             }
40             if(str[j]==C&&(j++)>2)
41             {
42                 col=0;
43                 while(str[j]>=0&&str[j]<=9)col=(col<<1)+(col<<3)+str[j++]-0;
44                 len=pd(col);
45                 while(len)
46                 {
47                     k=col%26;
48                     col/=26;
49                     if(k==0)col-=1,k+=26;
50                     pstr[len--]=k+64;
51                 }
52                 printf("%s%d\n",pstr+1,row);
53             }
54             else calc();
55         }
56         else calc();
57     }
58     return 0;
59 }
View Code

 

CODEFORCES 1B Spreadsheets

标签:分享   none   void   play   open   i++   sizeof   style   pread   

原文地址:https://www.cnblogs.com/reactord/p/9940648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!