只用C来写
题目:https://vjudge.net/problem/UVA-1588
1 #include<stdio.h>
2 #include<string.h>
3 #define LEN 1000
4
5 int l(int lenth1,int lenth2,int keep)
6 {
7 int lenth;
8 int m=lenth1-lenth2;
9 if(keep<=m)lenth=lenth1;
10 else lenth=keep+lenth2;
11 return lenth;
12 }
13
14 int lp(int lenth1,int lenth2,int keep)
15 {
16 return (lenth2-keep-1+lenth1);
17 }
18 int main()
19 {
20 char down[LEN]={'0'};
21 char up[LEN]={'0'};
22 while(scanf("%s",down)!=EOF)
23 {
24
25 int lenth1,lenth2,i;
26 int check=0,keep,LONG1,LONG2;
27 int LONG;
28 char* temp;
29 scanf("%s",up);
30 lenth1=strlen(down);
31 lenth2=strlen(up);
32 if(lenth1<lenth2)
33 {
34 char u[LEN];
35 int mid;
36 strcpy(u,down);
37 for(i=0;i<LEN;i++)down[i]='\0';
38 strcpy(down,up);
39 for(i=0;i<LEN;i++)up[i]='\0';
40 strcpy(up,u);
41 mid=lenth1;
42 lenth1=lenth2;
43 lenth2=mid;
44 }
45 temp=&up[0];
46 for(i=0;;i++)
47 {
48 if(i==lenth1){LONG1=lenth1+lenth2;break;}
49 keep=i;
50 for(;temp<=&up[lenth2-1];temp++,i++)
51 {
52 int sum;
53 if(down[i]!='\0')sum=(*temp-'0')+(down[i]-'0');
54 if(down[i]=='\0')sum=0;
55 if(sum==4){check=0;break;}
56 if(sum!=4)check=1;
57 }
58 if(check==1){LONG1=l(lenth1,lenth2,keep);break;}
59 i=keep;
60 temp=&up[0];
61 }
62 temp=&up[lenth2-1];
63 check=0;
64 for(i=lenth2-2;;i--)
65 {
66 if(i==-1){LONG2=lenth1+lenth2;break;}
67 keep=i;
68 for(;temp>=&up[0];temp--,i--)
69 {
70 int sum;
71 if(down[i]!='\0')sum=(*temp-'0')+(down[i]-'0');
72 if(down[i]=='\0')sum=0;
73 if(sum==4){check=0;break;}
74 if(sum!=4)check=1;
75 }
76 if(check==1){LONG2=lp(lenth1,lenth2,keep);break;}
77 i=keep;
78 check=0;
79 temp=&up[lenth2-1];
80 }
81 LONG=(LONG1>LONG2)?LONG2:LONG1;
82 printf("%d\n",LONG);
83 for(i=0;i<LEN;i++)up[i]='\0';
84 for(i=0;i<LEN;i++)down[i]='\0';
85 }
86 return 0;
87 }
来源:https://www.cnblogs.com/savennist/p/12284161.html