1B数值转换为26进制

来源:互联网 发布:最新淘宝优惠券二维码 编辑:程序博客网 时间:2024/05/21 11:26
#include<stdio.h>//这个题目对于讲十进制转换成以A表示1的26进制需要注意..
#include<math.h>//最开始用转换为2进制的处理方法来处理..但是发现不行.
#include<iostream>//比如当数为52的时候.应该是AZ.52%26 == 0 这个应该是Z
#include<string.h>//然后52/26 = 2 ,这个就应该是B了..就错了...
#include<stdlib.h>//所以当能够被整除的时候..要特殊处理...0作为Z同时..
#include<vector>// 52/26 = 2 应该-1.最开始是用/27来试的.
const int inf = 0x3f3f3f;
using namespace std;
int main()
{
//48 -- 57
    char a[1000];
    int row,col,test;
    while(scanf("%d",&test) != EOF)
    {
        while(test--)
        {
            scanf("%s",a);
            bool vis = 0;
            bool type = 0;
            for(int i = 0 ; i < strlen(a) ; i++)
            {
                if(a[i] <= '9')
                 vis = 1;
                if(vis && a[i] > '9')
                {
                    type = 1;
                    break;
                }
            }
            if(type)
            {
                char y[1000],x[1000],tmp[1000];
                memset(y,0,sizeof(y));
                memset(x,0,sizeof(x));
                memset(tmp,0,sizeof(tmp));
                int t = 0,s = 0,ans = 0,mul = 1,res;
                for(int i = 1 ; a[i] != 'C' ; i++)
                {
                    x[t++] = a[i];
                }
                for(int i = t+2 ; i < strlen(a) ; i++)
                {
                    y[s++] = a[i];
                }
                for(int i = s - 1 ; i >= 0 ; i--)
                {
                    ans += ( y[i] - '0' ) * mul;
                    mul *= 10;
                }
                t = 0 ;
                while(ans > 0)
                {
                   res = (ans % 26);
                   if(res  > 0)
                   {
                       res = 64 + res;
                       ans /= 26;
                   }
                   else
                   {
                        res = 90;
                        ans = ans/26;
                        ans--;
                   }
                   tmp[t++] = res ;
                }
                for(int i = strlen(tmp) - 1 ; i >= 0 ; i--)
                {
                    if(tmp[i] >= 'A' && tmp[i] <= 'Z')
                     printf("%c",tmp[i]);
                }
                printf("%s",x);
                printf("\n");
            }
            else
            {
                char ans[1000],x[1000];
                memset(ans,0,sizeof(ans));
                memset(x,0,sizeof(x));
                int mul = 1 ,res = 0,t = 0,s = 0;
                for(int i = 0 ; a[i] >= 'A' && a[i] <= 'Z'; i++)
                {
                    ans[t++] = a[i];
                }
                for(int i = t ; i < strlen(a) ; i++)
                {
                    x[s++] = a[i];
                }
                for(int i = strlen(ans) - 1 ; i >= 0 ; i--)
                {
                  if(ans[i] >= 'A' && ans[i] <= 'Z')
                  {
                      res += (ans[i] - 'A' +1)*mul ;
                      mul *= 26;
                  }


                }
                printf("R");
                printf("%s",x);
                printf("C");
                printf("%d\n",res);
            }
        }
    }
}
原创粉丝点击