【Codeforces】CF1B Spreadsheets (题解)

CF1B Spreadsheets


题解:

#include <bits/stdc++.h>
using namespace std;
char x[1000010];
int main() {
	int n,i,j,k;
	cin>>n;
	for(i=1; i<=n; i++) {
		bool tt=true;
		cin>>x;
		int l=strlen(x);
		if(x[0]=='R'&&'1'<=x[1]&&x[1]<='9') {
			for(int j=2; j<l; j++) {
				if(x[j]=='C') {
					k=j;
					tt=false;
					break;
				}
			}
		}
		if(tt) {
			int a[10];
			int sum=0,j=0;
			while(x[j]>='A'&&x[j]<='Z') {
				j++;
				a[j]=x[j-1]-'A'+1;
			}
			int k=j;
			for(int i=1; i<=j; i++) {
				int ans=1;
				for(int k=1; k<=j-i; k++) {
					ans*=26;
				}
				sum+=a[i]*ans;
			}
			cout<<"R";
			j--;
			for(int i=j+1; i<l; i++)
				cout<<x[i];
			cout<<"C"<<sum;
			cout<<endl;
		}
		if(!tt) {
			int a,b,x1[10];
			a=x[k+1]-'0';
			b=x[1]-'0';
			for(int i=k+2; i<l; i++) {
				a=a*10+x[i]-'0';
			}
			for(int i=2; i<k; i++) {
				b=b*10+x[i]-'0';
			}
			int sum=0,sum1=0;
			int k=0;
			while(a!=0) {
				k++;
				if(a%26!=0) {
					x1[k]=a%26;
					a/=26;
				} else 
				{
					x1[k]=26;
					a=a/26-1;
				}
			}
			for(int i=k; i>=1; i--) {
				cout<<char(x1[i]+'A'-1);
			}
			cout<<b;
			cout<<endl;
		}
	}
	return 0;
}
原文地址:https://www.cnblogs.com/BorisDimitri/p/13546619.html