NYOJ 1233 差值

差值

 
描述 
输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值。例如输入数组{1,  2},则输出9。
输入
第一行输入一个整数T,表示有T组测试数据。每组测试数据的第一行输入一个整数n(0<n<=1000),第二行输入n个整数ai(0<=ai<2^32)。
输出
输出最大数最小数的差值,每个输出各占一行。
样例输入
1
3
1 2 3
样例输出
198
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 struct str
 7 {
 8     char s[20];
 9 }sub[1005];
10 
11 bool cmp(str a,str b)
12 {
13     int i;
14     int len1=strlen(a.s);
15     int len2=strlen(b.s);
16     int x=max(len1,len2);
17     for(i=0;i<x;i++)
18     {
19         if(a.s[i%len1]<b.s[i%len2])
20             return 1;
21         else if(a.s[i%len1]>b.s[i%len2])
22             return 0;
23     }
24     return 1;
25 }
26 
27 int main()
28 {
29     int t,len,i,j,n;
30     char s[20050];
31     int a1[20050],a2[20050];
32     scanf("%d",&t);
33     while(t--)
34     {
35         scanf("%d",&n);
36         for(i=0;i<n;i++)
37             scanf("%s",sub[i].s);
38         sort(sub,sub+n,cmp);
39         /*for(i=0;i<n;i++)
40             printf("%s ",sub[i].s);
41         printf("
");*/
42         memset(s,0,sizeof(s));
43         for(i=0;i<n;i++)
44             strcat(s,sub[i].s);
45         len=strlen(s);
46         for(j=0,i=0;i<len;i++)
47             a1[j++]=s[i]-'0';
48         memset(s,0,sizeof(s));
49         for(i=n-1;i>=0;i--)
50             strcat(s,sub[i].s);
51         for(j=0,i=0;i<len;i++)
52             a2[j++]=s[i]-'0';
53         for(i=len-1;i>=0;i--)
54         {
55             a2[i]=a2[i]-a1[i];
56             if(a2[i]<0)
57             {
58                 a2[i]+=10;
59                 a2[i-1]-=1;
60             }
61         }
62         for(i=0;i<len;i++)
63             if(a2[i])break;
64             if(i==len)
65                 printf("0");
66         for(;i<len;i++)
67             printf("%d",a2[i]);
68         printf("
");
69     }
70     return 0;
71 }
原文地址:https://www.cnblogs.com/homura/p/4792635.html