Problem A: 大内密探零零发的密码


Description

东汉末年,群雄割据,益州疲弊。此诚危急存亡之秋也。

大内密探零零发临危受命,到曹营潜伏。 十数年卧薪尝胆,终于打听到曹营当前的士兵总数(num)。

为了让大唐朝了解曹营的军力状况(就是士兵总数num),同时不让曹营之人截获此信时发现其中的奥秘;

聪明的他想到一个好方法:

他把这个数据 num 写在一个由 0~9 组成的超长字符串 S 中;

把这个字符串中的 “8” 看成空格,就能分割出一个个数字(不可能全部都是8)。

其中 num 就是这些数字中的最大值( num<1,000,000,000)。

Input

输入包含多组测试数据。 输入第一行是一个整数T,表示共有T组测试数据(1<=T<=20);

接下来T行,每行为一个由 0~9 组成的字符串S(字符串S长度<=5000);

Output

对于每组测试数据,输出一行,输出用 “8” 分割得到的数字中的最大值。

Sample Input
3
100083215800
1234567890
200978086
Sample Output
3215
1234567
20097
简单描叙一下我的思路,就是得到一串字符串后,一个一个检查,是不是八,不是八就塞到一个临时数组里,然后当遇到八的时候转换成整数,与答案相比那个大,如果大就替换掉,直到最后一个,再执行一次检查,循环结束,输出答案
			

#include<stdio.h> #include<string.h> char a[5010]; char c[5010]; int answer[21]; main() {   int n,j=0;int sum=0,k=1;   scanf("%d",&n);   int counter=n;    while(n--)    {     //printf("%d",n);     scanf("%s",a);     for(int i=0;a[i];i++)     { check:  if(a[i]=='8')      {         for(int u=strlen(c)-1;u>=0;u--)          {          sum+=(c[u]-48)*k;          k*=10;       // printf("%d\n",sum);          }                if(sum>(answer[n]))      {answer[n]=sum; }                sum=0;      k=1;j=0;      memset(c,0,sizeof(c));    continue;    }      c[j]=a[i];       j++;       if(!a[i+1])       {       a[i+1]='8';i++; goto check;       }

                 }          //printf("%d\n",answer[1]);     memset(c,0,sizeof(c));    // answer=-1;    }     for(int i=counter-1;i>=0;i--)    {     printf("%d\n",answer[i]);    }    }