学Python,亦重拾算法。
两种单元格表示方式间的转换。遇到两个问题,一是除26时,商为1的问题,二是在区分两种格式时出错。
1 # -*- coding: utf-8 -*- 2 d=ord('A')-1 3 def dig_ch(row): 4 ans='' 5 while(row): 6 md=row%26 7 if md!=0: 8 ans+=chr(md+d) 9 row=row/26 10 else: 11 ans+='Z' 12 row=row/26-1 #忘记减1 13 14 return ans[::-1] 15 def colm(coord): 16 x=0 17 while(1): 18 if coord[x] in num: 19 return x 20 else: 21 x+=1 22 def ch_dig(row): 23 row=row[::-1] 24 ans=0 25 i=0 26 while(i<len(row)): 27 md=pow(26,i)*(ord(row[i])-d) 28 ans+=md 29 i+=1 30 return str(int(ans)) 31 32 n=int(raw_input()) 33 num=['1','2','3','4','5','6','7','8','9','0'] 34 35 while(n): 36 coord=raw_input() 37 n-=1 38 if coord[0]=='R' and coord[1] in num and coord.find('C')!=-1: #忘记检测C的存在 39 c=coord.find('C') 40 col=coord[1:c] 41 row=int(coord[c+1:]) 42 print dig_ch(row)+col 43 else: 44 x=colm(coord) 45 col=coord[x:] 46 row=coord[:x] 47 print 'R'+col+'C'+ch_dig(row)
事实上用正则表达式来检测和切割输入的字符串更加方便,另外,检测数字时有函数isdigit(),忘记用了。