Codeforces Round #1B Spreadsheets

<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;
}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值