数值排序
提交: 186 解决: 45
[提交][状态][讨论版]
题目描述
输入一串数字,把这串数字中的‘0’都看成空格,那么就得到一行用空格分割的若干非负整数(如果有三个或三个以上连续的‘0’,则第1个‘0’看成一个空格,第2个‘0’看成数值0,后面连续的0看成一个空格)。
你的任务是对这些分割得到的整数依从大到小的顺序排序。
输入
输入文件中包含多个测试数据。每个测试数据为一串数字(数字之间没有空格,最前面的数字不为0)。测试数据保证:分割后得到的每个非负整数不会大于10000000000;分割后最多有10000个非负整数;最后一个数字不可能是0。
测试数据一直到文件尾。
请用字符处理。
输出
对输入文件中的每个测试数据,输出一行,是分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开。
样例输入
4500051231232050775
111054300023980012980090000098765430001
样例输出
51231232 775 45 5 0 9876543 2398 1298 543 111 9 1 0 0 0
1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 #include <algorithm> 5 #include <queue> 6 using namespace std; 7 priority_queue<long long>q; 8 int main() 9 { 10 char a[505]; 11 while(cin>>a) 12 { 13 int l=strlen(a); 14 long long k=0; 15 int u=0; 16 bool f=0; 17 for(int i=0;i<l;i++) 18 { 19 if(a[i]!='0') 20 { 21 k=k*10+a[i]-'0'; 22 f=1; 23 u=0; 24 } 25 else if(a[i]=='0'&&f==1) 26 { 27 q.push (k); 28 k=0; 29 f=0; 30 u++; 31 } 32 else if(a[i]=='0'&&f==0&&u==2) 33 { 34 q.push (0); 35 u++; 36 } 37 else if(a[i]=='0') 38 u++; 39 } 40 q.push(k); 41 while(!q.empty()) 42 { 43 cout<<q.top(); 44 q.pop(); 45 if(q.empty ()) cout<<endl; 46 else cout<<" "; 47 } 48 } 49 return 0; 50 }