CodeForces 1B Spreadsheets (字符串处理,注意细节,大胆尝试)

题目

注意模后余数为0时,要把除以26后的新数据减1,为什么这样,要靠大胆尝试。我在对小比赛中坑了一下午啊,直到比赛结束也没写出这道题。。。。要死了。。

#include<stdio.h>
#include<string.h>


int main()
{
    int n,i,j,row,col,len;
    char str[20],ans[20];
    scanf("%d",&n);
    while(n--)
    {
        memset(ans,0,sizeof(ans));
        scanf("%s",str);
        len=strlen(str);
        
        int er=0,yi=0;
        
        if(str[1]>='0'&&str[1]<='9')
        {
            yi=1;
            for(i=1;i<len;i++)
            {
                if(!(str[i]>='0'&&str[i]<='9'))
                {
                    er=1;
                    break;
                }
            }
            if(er==1){
                er=1;
                row=col=0;
                for(i=1;;i++)
                {
                    if(!(str[i]>='0'&&str[i]<='9'))break;
                    row=row*10+(str[i]-'0');
                }
                for(i++;i<len;i++)
                {
                    col=col*10+(str[i]-'0');
                }
                int temp,k=0;
                while(col)
                {
                    temp=col%26;
                    
                    col=col/26;
                    if(temp==0) ans[k++]='Z',col--;
                    else ans[k++]='A'+temp-1;
                }
                ans[k]='';
                int kk=k/2;
                char cc;
                for(int ii=0;ii<kk;ii++)
                {
                    cc=ans[ii];
                    ans[ii]=ans[k-ii-1];
                    ans[k-ii-1]=cc;
                }
                printf("%s%d
",ans,row);
            }
        }
        if(er==0||yi==0)
        {
            row=col=0;
            for(i=0;i<len;i++)
            {
                if(str[i]>='0'&&str[i]<='9')break;
            }
            j=i-1;
            for(;i<len;i++)
            {
                row=row*10+(str[i]-'0');
            }
            int jin=1;
            for(i=j;i>=0;i--)
            {
                col=col+jin*(str[i]-'A'+1);
                jin=jin*26;
            }
            printf("R%dC%d
",row,col);
        }
    }
    return 0;
}
View Code
一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3677076.html