fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.  
  6. char *strrev(char *str){
  7. char *p1, *p2;
  8. if(!str || !*str)
  9. return str;
  10. for( p1 = str, p2 = strlen(str)+str-1; p1<p2; ++p1, --p2){
  11. *p1 ^= *p2;
  12. *p2 ^= *p1;
  13. *p1 ^= *p2;
  14. }
  15. return str;
  16. }
  17.  
  18. void append(char *s, char c){
  19. int len = strlen(s);
  20. s[len] = c;
  21. s[len + 1] = '\0';
  22. }
  23.  
  24. char *removeLeadingZeros(char *s){
  25. char *tmp;
  26. for(int i=0; i<strlen(s); i++){
  27. if(s[i] != '0'){
  28. tmp = s+i;
  29. break;
  30. }
  31. }
  32. return tmp;
  33. }
  34.  
  35. void palin(char *s){
  36. //printf("s: %s\n", s);
  37. int midpoint = floor(strlen(s)/2);
  38. char p[midpoint];
  39. char q[midpoint];
  40. int odd = strlen(s) % 2;
  41. strncpy(p, s, midpoint);
  42. p[midpoint] = '\0';
  43. strcpy(q, s+midpoint+odd);
  44. //printf("p: %s\tq: %s\n", p, q);
  45. int i=midpoint-1, j=0;
  46. do{
  47. int a, b;
  48. a = p[i];
  49. b = q[j];
  50. if(a == b){
  51. i--;
  52. j++;
  53. continue;
  54. }
  55. if(a < b){
  56. if(odd)
  57. s[midpoint] += 1;
  58. else
  59. p[midpoint-1] += 1;
  60. }
  61. break;
  62. }while(1);
  63. char rev[strlen(p)];
  64. strcpy(rev, p);
  65. strrev(rev);
  66. //printf("p: %s\nrev: %s\n", p, rev);
  67. if(odd)
  68. append(p, s[midpoint]);
  69. //printf("p: %s\tq: %s\n", p, q);
  70. strcat(p, rev);
  71. printf("%s\n", p);
  72. }
  73.  
  74. int main(){
  75. int t;
  76. scanf("%i", &t);
  77. while(t--){
  78. char s[1000000];
  79. scanf("%s", s);
  80. char *p;
  81. p = removeLeadingZeros(s);
  82. s[strlen(s) - 1] += 1;
  83. palin(p);
  84. }
  85. return 0;
  86. }
Success #stdin #stdout 0s 4720KB
stdin
15
808
2122
921234597683614541565164512642156415642156421
01234587964531256497854
514154715247
65416521
6415647512
61567516721
3264517
134521657
6546416512
2654187
31457268
315427517
25478966
stdout
818
2222
921234597683614541565171565145416386795432129
1234587964554697854321
514155551415
65422456
6415665146
61567576516
3264623
134525431
6546446456
2654562
31466413
315434513
25488452