1190.大整数排序
Posted bernieloveslife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1190.大整数排序相关的知识,希望对你有一定的参考价值。
- 题目描述:
-
对N个长度最长可达到1000的数进行排序。
- 输入:
-
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
- 输出:
-
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
- 样例输入:
-
3 11111111111111111111111111111 2222222222222222222222222222222222 33333333
- 样例输出:
-
33333333 11111111111111111111111111111 2222222222222222222222222222222222
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int MAX = 1000; struct BigInteger { int digit[MAX]; int size; void init() { for (int i = 0;i < MAX;i++) { digit[i] = 0; } size = 0; } void set(char str[]) { init(); int L = strlen(str); for (int i = L - 1, j = 0, t = 0, c = 1;i >= 0;i--) { t += (str[i] - ‘0‘)*c; j++; c *= 10; if (j == 4 || i == 0) { digit[size++] = t; j = 0;t = 0;c = 1; } } } void output() { for (int i = size - 1;i >= 0;i--) { if (i != size - 1) { printf("%04d", digit[i]); } else { printf("%d", digit[i]); } } printf(" "); } bool operator < (const BigInteger A) const { if (size != A.size) { return size < A.size; } else { for (int i = size - 1; i >= 0; i--) { if (digit[i] != A.digit[i]) { return digit[i] < A.digit[i]; } } } } }E[100]; char str[1000]; int main() { int n; while (scanf("%d", &n) != EOF) { for(int i =0;i<n;i++) { scanf("%s", str); E[i].set(str); } sort(E, E + n); for (int i = 0;i<n;i++) { E[i].output(); } } return 0; }
以上是关于1190.大整数排序的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段
ZZNUOJ_用C语言编写程序实现1190:查询记录(结构体专题)(附完整源码)