Living-Dream 系列笔记 第28期

本期讲解了进制转换。

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。

posted @ 2024-03-03 18:35  _KidA  阅读(9)  评论(0)    收藏  举报