1B. Spreadsheets
在流行的电子表格系统中(例如,在Excel中),使用以下列的计数。第一列有数字A,第二列有数字B,以此类推,直到第26列用Z标记。然后有两个字母数字:第27列有数字AA,28-AB,第52列用AZ标记。在ZZ之后有三个字母数字,等等。
行由从1开始的整数标记。单元格名称是列和行号的串联。例如,BC23是第55列第23行中单元格的名称。
有时会使用另一种计数系统:RXCY,其中X和Y是整数,分别显示列和行的数字。例如,R23C55是上一个示例中的单元格。
您的任务是编写一个程序,读取给定的单元格坐标序列,并生成根据另一个计数系统的规则编写的每个项目。
输入
输入的第一行包含整数n(1 ≤ n ≤ 105),即测试中的坐标数。然后有n条线,每一条都包含坐标。所有坐标都正确,没有列和/或行号大于106的单元格。
输出
写n行,每行应包含一个单元格坐标在其他记数系统。
#include <iostream> #include <math.h> #include<string> using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { string a,b; string str = ""; cin >> a; if (a[0]=='R') { if (a[1]>='0'&&a[1]<='9') { int j = 2; while (a[j] != NULL) { if (a[j]!='C') { j++; //cout << j << endl; continue; } else { int x=0,y=0;//行和列 for (int k = 1; k < j; k++) { x = x * 10 + a[k]-48; } for (int k = j+1; k < a.length(); k++) { y = y * 10 + a[k]-48; } //cout << x << " " << y << endl; while (y > 0) { int m = y % 26; if (m == 0) m = 26; str += (char)(m + 64); y = (y - m) / 26; } reverse(str.begin(), str.end()); //反序 //cout << str << endl; 十进制转26进制 b = str + to_string(x); cout << b<<endl; break; } } } } if (str=="") { str += 'R'; int j = 1; while (a[j]!=NULL) { if (a[j] <= '9') { str += a[j];//记录行数 } j++; } str += 'C'; int y = 0; j = 0; while (a[j] > '9') { y = y * 26 + a[j] - 64; j++; } //cout <<y << endl; str += to_string(y); cout << str<<endl; } } return 0; }
浙公网安备 33010602011771号