《编程思维与实践》1030.按整数最高位的值排序
题目


思路
用字符串读取,结构体存取十进制最高位数字和数本身的大小.
注意的点:
整数范围可能为10^18,应该用longlong存储.
代码
typedef struct{int firstnumber;long long number;}Data;
int cmp(const void *a,const void *b)
{
Data *m=(Data*)a;
Data *n=(Data*)b;
if(m->firstnumber!=n->firstnumber)
{
return n->firstnumber-m->firstnumber;
}
else{
if(m->number>n->number){
return 1;
}
else{
return -1;
}
}
}
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<T;i++)
{
int N;
scanf("%d",&N);
Data tab[N];
char s[N][100];
for(int j=0;j<N;j++)
{
scanf("%s",s[j]);
tab[j].number=atoll(s[j]);
tab[j].firstnumber=s[j][0]=='-'?s[j][1]-'0':s[j][0]-'0'; //跳过负号
}
qsort(tab,N,sizeof(Data),cmp);
printf("case #%d:\n",i);
for(int j=0;j<N;j++)
{
printf("%lld ",tab[j].number);
}
printf("\n");
}
return 0;
}