题解
2025-03-25 15:22:50
发布于:湖南
7阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int digit[1000005];
bool type(string s)
{
for(int i = 1; i < s.size(); i++)
{
if(s[i] >= 'A' && s[i] <= 'Z' && s[i-1] >= '0' && s[i-1] <= '9')
return false;
}
return true;
}
void change1(string s) // excel转RXCY
{
int C = 0, i = 0, num = 0;
for(i = 0; i < s.size(); i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
C = C * 26 + (s[i] - 'A' + 1);
}
else
break;
}
while(i < s.size())
{
num = num * 10 + (s[i] - '0');
i++;
}
cout << "R" << num << "C" << C << "\n";
return ;
}
void change2(string s) //RXCY转EXCEL
{
int i, R = 0, C = 0, tot = 0; //R统计函数C统计列数,tot统计十六进制位数
bool flag = false; //false表示统计行的数量
for(i = 1; i < s.size(); i++)
{
if(s[i] >= '0' && s[i] <= '9' && flag == false)
R = R * 10 + (s[i] - '0');
else if (s[i] >= '0' && s[i] <= '9' && flag == true)
C = C * 10 + (s[i] - '0');
else //s[i] == 'C'
flag = true;
}
while(C != 0)
{
digit[++tot] = C % 26;
if(C % 26 == 0) //特判,余数为0
C--;
C /= 26;
}
for(i = tot; i >= 1; i--)
{
if(digit[i] == 0)
cout << 'Z';
else
cout << (char)(digit[i] - 1 + 'A');
}
cout << R << "\n";
return ;
}
int main()
{
int n;
cin >> n;
while(n--)
{
string s;
cin >> s;
if (type(s) == true) //excel转RXCY
change1(s);
else
change2(s);
}
return 0;
}
这里空空如也
有帮助,赞一个