zoukankan      html  css  js  c++  java
  • codeforces 1B

    原题链接:

      http://codeforces.com/problemset/problem/1/B

    题意:

      一道进制转化的模拟题:A==1;  

               ...

            Z==26;

            AA==27;

            AB==28;

       按照这个方式计算互相转换(数字到字母,字母到数字),从A到Z很容易就联想到是:

        (1) [数字]=[字母]-'A'+1;

       (2)[字母]=[数字]-1+'A';

       但要注意没有字母代表0;当执行(2)时,数字为0时字母就变成了'@';

       如26-->A@,实际应为z;那么该如何解决呢?

        我们将每位是对应的值用我们所熟知的十进制表示一下[A] [@]-->[1] [-1];

        再负变正[1] [-1]-->[0] [26];

       也就是说我们在讲数字转化成字母后需要进行处理;

    1 if(!(a[i]>='A'&&a[i]<='Z')&&!(a[i]>='0'&&a[i]<='9'))
    2 {
    3     a[i]=a[i]-'A'+'Z'+1;
    4     a[i+1]--;
    5 }

    代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<string>
     4 #include<algorithm> 
     5 
     6 using namespace std;
     7 
     8 bool vj(string a)
     9 {
    10     int i,fg=0;
    11     bool x=true;
    12     for(i=0;i<a.length();i++)
    13     {
    14         if(a[i]>='1'&&a[i]<='9')
    15             fg=1;
    16         if(fg&&a[i]>='A'&&a[i]<='Z')
    17             return !x;                
    18     }
    19     return x;
    20 }
    21 
    22 int main()
    23 {
    24     string s;
    25     int n;
    26     cin>>n;
    27     while(n--)
    28     {
    29         cin>>s;
    30         if(vj(s))
    31         {
    32             int sumC=0,sumR=0;
    33             int i;
    34             for(i=0;i<s.length();i++)
    35             {
    36                 if(s[i]>='A'&&s[i]<='Z')
    37                     sumC=sumC*26+(s[i]-'A'+1);
    38                 else
    39                     sumR=sumR*10+(s[i]-'0');
    40             }
    41             cout<<'R'<<sumR<<'C'<<sumC<<endl;
    42         }
    43         else
    44         {
    45             string a;
    46             int sumR=0,sumC=0;
    47             int i,fg=1;
    48             for(i=0;i<s.length();i++)
    49             {
    50                 if(s[i]>='0'&&s[i]<='9'&&fg)
    51                     sumR=sumR*10+(s[i]-'0');
    52                 else if(s[i]>='0'&&s[i]<='9')
    53                     sumC=sumC*10+(s[i]-'0');
    54                 if(s[i]=='C')
    55                     fg=0;        
    56             }
    57             while(sumC)
    58             {
    59                 a+=sumC%26-1+'A';
    60                 sumC/=26;
    61             }
    62             for(i=0;i<a.length()-1;i++)
    63             {
    64                 if(!(a[i]>='A'&&a[i]<='Z')&&!(a[i]>='0'&&a[i]<='9'))
    65                 {
    66                     a[i]=a[i]-'A'+'Z'+1;
    67                     a[i+1]--;
    68                 }
    69             }
    70             reverse(a.begin(), a.end());
    71             if(a[0]=='@')
    72                 a=a.substr(1);
    73             cout<<a<<sumR<<endl;
    74         }
    75     }
    76     return 0;
    77 }

    ------------欢迎评论--------------

  • 相关阅读:
    Quartus 自定义一个IP核,通过AXI总线被HPS系统控制(未完待续)
    IR 发送数据的上升沿和下降沿的判断(边沿检测)
    机器学习特征工程和优化方法
    最大期望算法(EM)
    主题模型(Topic Model)
    马尔科夫(Markov)
    【mysql-02-2】使用文档-建表约束
    【mysql-02-3】使用文档-范式
    【mysql-02-1】使用文档-基本语法
    Linux身份鉴别机制原理
  • 原文地址:https://www.cnblogs.com/x-x-y/p/6973551.html
Copyright © 2011-2022 走看看