题目
数据
3
1
1234
5
100 -15 0 30 7
10
1 1 3 4 5 6 -7 -8 123456789012345678 10000000
思路
用个char * 或者string储存,然后把首位抽出来,再转化成ll类型排序即可
注意 string别和qsort混用。因为string的大小是不固定的
代码
#include<iostream>
#include<algorithm>
using namespace std;
struct NUM
{
short initial;
string all;
long long num;
NUM()
{
num = 0;
}
void init()
{
int neg = 0;
for(int i = 0; i < all.length(); i++)
{
if(all[i] == '-')
{
neg = 1;
continue;
}
num *= 10;
num += (all[i] - '0');
}
initial = ((neg) ? all[1] : all[0]) - '0';
num = ((neg) ? -num : num);
}
};
// int cmp(const void *q1, const void *q2)
// {
// NUM * p1 = (NUM *)q1;
// NUM * p2 = (NUM *)q2;
// if(p1->initial == p2->initial)
// {
// if(p1->num > p2->num)
// {return 1;}
// else
// {return -1;}
// }
// if(p1->initial > p2->initial)
// {return -1;}
// else
// {return 1;}
// }
bool scmp(NUM p1,NUM p2)
{
if(p1.initial == p2.initial)
{
return(p2.num > p1.num);
}
return (p1.initial > p2.initial);
}
int main()
{
int total;
cin >> total;
for(int i = 0; i < total; i++)
{
int alli;
cin >> alli;
NUM * N = new NUM[alli];
for(int j = 0; j < alli; j++)
{
cin >> N[j].all;
N[j].init();
}
sort(N,N+alli,scmp);
cout << "case #" << i << ":" << endl;
for(int j = 0; j < alli; j++)
{
cout << N[j].all << " ";
//输出string的话只能输出第一个字符
}
cout << endl;
}
}