学校OJ——26进制(字符串处理)

问题 B: 26进制数
时间限制: 1 Sec 内存限制: 32 MB
提交: 831 解决: 249
[提交][状态][讨论版]
题目描述
现在我们用A表示26,用B表示25,依次类推,到用Z表示1,即A=26, …X = 3, Y = 2, Z=1,用这种方式构建一个26进制的计数方式。举一个例子:(XD)26=(101)10 。

输入
第一行数字N(N<50)表示有N行输入数据。

接下来的N行,每行为一个长度不超过100的26进制数。

输出
升序输出这些26进制数,一行一个。
样例输入
2
XB
XX
样例输出
XX
XB
提示
即使是unsigned long long也装不下。

分析:既然是字符串处理,那么肯定不可能将字符转换成数字来处理(因为题目中已经有提示了)
其实很容易分析知道,这题的比较依据:

  • 字符串的长度(长的肯定大)
  • 如果一样长的话,就根据ASCII码来排(根据ASCII码从大到小排 为什么?可以自己思考一下qwq

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(const string &a1,const string &a2)  //自定义排序
{
    if(a1.length()==a2.length())  //如果长度相同,就按照ASCII码从大到小来排序
        return a1>a2;
    else return a1.length()<a2.length();否则就按照长度排
}
int main()
{
    int N;
    cin>>N;
    string a[55];
    for(int i=0;i<N;i++)
        cin>>a[i];
    sort(a,a+N,cmp);
    for(int i=0;i<N;i++)
        cout<<a[i]<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43508782/article/details/84863092