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

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

题目

在这里插入图片描述
在这里插入图片描述

思路

用字符串读取,结构体存取十进制最高位数字和数本身的大小.

注意的点:

整数范围可能为 1 0 18 10^{18} 1018,应该用longlong存储.

代码

#include<stdio.h>
#include<stdlib.h>

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;
}

猜你喜欢

转载自blog.csdn.net/boxueyuki/article/details/130024299