您的位置:首页 > 其它

【PAT甲级】1038. Recover the Smallest Number (30)

2016-10-24 11:04 441 查看
注:比较大小时要用长整型
注2:注意数字片段中可能存在全为0的片段,要跳过这些开头片段,并对第一个非零片段进行前几位0消除;如果片段全为0,则输出0;


#include <stdio.h>
#include <deque>
#include <algorithm>
#include <cmath>
#include <string.h>
using namespace std;
typedef struct Seg {
char digit[10];
int len;
int num;
} Seg;
int getNum(char *a, int l) {
int sum = 0;
for (int i = 0; i < l; i++) {
sum = sum * 10 + a[i] - '0';
}
return sum;
}
bool com(Seg a, Seg b) {
long long int aa = (long long int)(a.num);
long long int bb = (long long int)(b.num);
long long int x = aa * pow(10, b.len) + bb;
long long int y = bb * pow(10, a.len) + aa;
if (x < y) return true;
return false;
}

int main(int argc, char *argv[]) {
deque<Seg> q;
int n;
scanf("%d", &n);
int i, j;
for (i = 0; i < n; i++) {
Seg s;
scanf("%s", s.digit);
s.len = strlen(s.digit);
s.num = get
4000
Num(s.digit, s.len);
q.push_back(s);
}
sort(q.begin(), q.end(), com);
while (!q.empty() && q.front().num == 0) q.pop_front();//注意有可能前面几个数字片段全为0
if (!q.empty()) {
printf("%d", q[0].num);
for (j = 1; j < int(q.size()); j++) {
printf("%s", q[j].digit);
}
printf("\n");
} else {
printf("0\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: