<pre name="code" class="cpp">/*由于使用了pow函数,不同编译器计算结果可能有所差别 。提交时选择编译器:microsoft visual c++ 2010*/
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <cctype>
#include <cmath>
using namespace std;
map<char, int> m;
int StringToNum (string s)
{
int sum = 0;
reverse(s.begin(), s.end());
for (int i = 0; i < s.size(); ++i) {
sum += (s[i] - '0') * pow(10.0, i * 1.0);
}
return sum;
}
int main()
{
m['A'] = 1; m['B'] = 2; m['C'] = 3; m['D'] = 4; m['E'] = 5; m['F'] = 6; m['G'] = 7; m['H'] = 8;
m['I'] = 9; m['J'] = 10; m['K'] = 11; m['L'] = 12; m['M'] = 13; m['N'] = 14; m['O'] = 15; m['P'] = 16;
m['Q'] = 17; m['R'] = 18; m['S'] = 19; m['T'] = 20; m['U'] = 21; m['V'] = 22; m['W'] = 23; m['X'] = 24;
m['Y'] = 25; m['Z'] = 26;
int cas;
string s;
cin >> cas;
while (cin >> s) {
bool IsFunA = false;
if (s[0] == 'R' && isdigit(s[1]) && (s.find('C') != -1)) {
IsFunA = true;
}
if (IsFunA) {
string r, c;
int row, column;
int k = 1;
while (isdigit(s[k])) {
r += s[k];
++k;
}
k += 1;
while (k < s.size()) {
c += s[k];
++k;
}
row = StringToNum(r);
column = StringToNum(c);
string tmp;
while (column) {
--column;
tmp += ('A' + column % 26);
column /= 26;
}
reverse(tmp.begin(), tmp.end());
cout << tmp << row << endl;
}
else {
int k = 0;
string column, row;
while (!isdigit(s[k])) {
column += s[k];
++k;
}
for (int i = k; i < s.size(); ++i) {
row += s[i];
}
cout << "R" << row << "C";
reverse(column.begin(), column.end());
int sum = 0;
for (int i = 0; i < column.size(); ++i) {
sum += m[column[i]] * pow(26.0, i * 1.0);
}
cout << sum << endl;
}
}
return 0;
}
Codeforces Round #1B Spreadsheets
最新推荐文章于 2024-01-03 10:56:04 发布