poj1002总是WA,但测试样例已经通过了,边缘情况也想了不少,求解解决思路

poj1002总是WA,但测试样例已经通过了,边缘情况也想了不少,求解
题目地址:http://poj.org/problem?id=1002
代码如下:
#include<iostream>
using namespace std;
char c1[128];
char c2[9];
int x[100002];

void parseint(int i){
x[i]=(c2[0]-48)*1000000+(c2[1]-48)*100000+(c2[2]-48)*10000+(c2[4]-48)*1000+(c2[5]-48)*100+(c2[6]-48)*10+(c2[7]-48);
}

void exchange(int& a,int& b){
int t;
t=a;
a=b;
b=t;
}

int PARTITION(int* A,int l,int r){
int x=A[r];
int i=l-1;
for(int j=l;j<=r-1;j++){
if(A[j]<=x){
i++;
exchange(A[i],A[j]);
}
}
exchange(A[i+1],A[r]);
return i+1;
}

void QUICKSORT(int* A,int l,int r){
if(l<r){
int q=PARTITION(A,l,r);
QUICKSORT(A,l,q-1);
QUICKSORT(A,q+1,r);
}
}

int main(){
int n;//号码数 
cin>>n;
for(int i=0;i<n;i++){
cin>>c1;
int j=0;//c1
int k=0;//c2
while(j<strlen(c1)){
if(k==3){
c2[k]='-';
k++;
continue;
}
switch(c1[j]){
case 'A':case 'B':case 'C':c2[k]='2';k++;j++;continue;
case 'D':case 'E':case 'F':c2[k]='3';k++;j++;continue;
case 'G':case 'H':case 'I':c2[k]='4';k++;j++;continue;
case 'J':case 'K':case 'L':c2[k]='5';k++;j++;continue;
case 'M':case 'N':case 'O':c2[k]='6';k++;j++;continue;
case 'P':case 'R':case 'S':c2[k]='7';k++;j++;continue;
case 'T':case 'U':case 'V':c2[k]='8';k++;j++;continue;
case 'W':case 'X':case 'Y':c2[k]='9';k++;j++;continue;
case '-':j++;continue;
default:c2[k]=c1[j];k++;j++;continue;
}
}
c2[8]='\0';
parseint(i);
}
x[n]=0;
QUICKSORT(x,0,n-1);
int k=1;
int flag=0;
int i;
for(i=0;i<n;i++){
if(x[i-1]==x[i]){
k++;
}
else{
if(k>1){
cout<<x[i-1]/10000<<"-"<<x[i-1]%10000<<" "<<k<<endl;
flag=1;
}
k=1;
}
}
if(k>1){
cout<<x[i-1]/10000<<"-"<<x[i-1]%10000<<" "<<k<<endl;
flag=1;
}
if(flag==0){
cout<<"No duplicates."<<endl;
}
return 0;
}


------解决方案--------------------
请试以0开始的数据,如:
4
0123456
0123456
0000000
0000000