本期讲解了进制转换。
T1
考验代码能力的好题。
首先需要判断输入的坐标是 RXCY
型还是 Excel
型:
- 直接扫一遍字符串,若存在一个字母前面是数字,则说明是
RXCY
型,否则是Excel
型。
这一部分的代码:
bool check(string s){
for(int i=0;s[i];i++)
if(isupper(s[i])&&isdigit(s[i-1]))
return 0;
return 1;
}
其次,若当前字符串为 Excel
型,则需要设计转为 RXCY
型的函数:
- 扫描一遍字符串,若为大写字母则转为十进制,若为数字则存下来,最后输出这两个值作为列和行即可。
这一部分的代码:
void solve1(string s){
int i=0,num1=0,num2=0;
while(isupper(s[i])&&i<s.size()) num1=num1*26+(s[i++]-'A'+1);
while(isdigit(s[i])&&i<s.size()) num2=num2*10+(s[i++]-'0');
cout<<'R'<<num2<<'C'<<num1<<'\n';
}
然后,若当前字符串为 RXCY
型,则需要设计转为 Excel
型的函数:
- 扫描一遍字符串,存下行与列,将列转为 \(26\) 进制输出,再输出行即可。
这一部分的代码:
void solve2(string s){
int i=0,j=0,num1=0,num2=0,t[131]={0};
for(i++;isdigit(s[i]);i++) num1=num1*10+(s[i]-'0');
for(i++;isdigit(s[i]);i++) num2=num2*10+(s[i]-'0');
for(;num2;num2=num2/26-!(num2%26)){
if(num2%26) t[++j]=num2%26;
else t[++j]=26;
}
for(;j;j--) cout<<(char)(t[j]+'A'-1);
cout<<num1<<'\n';
}
然后这题就做完了 \(qwq\)。
T2
见tj。
标签:Living,26,num1,num2,++,Excel,28,RXCY,Dream From: https://www.cnblogs.com/XOF-0-0/p/18050446