Problem Description 輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。 你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。 Input 輸入包含多組測試用例,每組輸入數據只有一行數字(數字之間沒有空格),這行數字的長度不大於1000。 輸入數據保證:分割得到的非負整數不會大於100000000;輸入數據不可能全由‘5’組成。 Output 對於每個測試用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出占一行。 Sample Input 0051231232050775 Sample Output 0 77 12312320 [cpp] //快排與atoi函數的運用 #include <iostream> #include <cstdio> #include <cstring> #include <stdlib.h> using namespace std; char str[10005],p[10005]; int num[10005]; int cmp(const void *a,const void *b) { return (*(int*)a - *(int*)b); } int main() { while(gets(str)) { int j = 0,k = 0,i,len; len = strlen(str); str[len] = '5'; str[++len] = '\0'; for(i = 0;i<len;i++) { if(str[i] != '5') p[j++] = str[i]; else if(str[i-1]!='5' && i>0)// 對於是5的位置還需要檢查前一個字符是不是5,如果前一個字符已經是5,則表明這是多余的5。 { p[j] = '\0'; num[k++] = atoi(p); j = 0; } } qsort(num,k,sizeof(int),cmp); for(i = 0;i<k-1;i++) cout << num[i] << " "; cout << num[i] << endl; } return 0; }