fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int all_nine(char* input){
  6. int result = 1, i;
  7. for(i = 0; i < strlen(input); ++i){
  8. if(input[i] != '9')
  9. return 0;
  10. }
  11. return result;
  12. }
  13.  
  14. char* increase_one(char* input){
  15. int i;
  16. for(i = strlen(input) - 1; i >= 0; --i) {
  17. if(input[i] < '9'){
  18. input[i] += 1;
  19. break;
  20. }
  21. else{
  22. input[i] = '0';
  23. }
  24. }
  25. return input;
  26. }
  27.  
  28.  
  29. char* increase_make_palin(char* input){
  30. int input_len = strlen(input);
  31. int half_len = input_len%2 ? input_len/2 : input_len/2 - 1;
  32. int carry = 1, i;
  33. for(i = half_len; i >= 0; --i) {
  34. int cur_val = input[i] - '0';
  35. carry = (cur_val + carry) / 10;
  36. int new_val = (cur_val + carry) % 10;
  37. input[i] = input[input_len - 1 - i] = '0' + new_val;
  38. }
  39. return input;
  40. }
  41. char* next_palin_for_me(char* input){
  42. int input_len = strlen(input);
  43. int half_len = input_len/2 - 1, i;
  44. for(i = half_len; i >= 0; --i) {
  45. if(input[i] > input[input_len - 1 - i]){
  46. input[input_len - 1 - i] = input[i];
  47. } else {
  48. return increase_make_palin(input);
  49. }
  50. }
  51. return input;
  52. }
  53.  
  54. char* next_palin(char* input){
  55. int input_len = strlen(input);
  56. if(all_nine(input)){
  57. return next_palin_for_me(increase_one(input));
  58. }
  59. if(input_len == 1){
  60. input[0] += 1;
  61. return input;
  62. }
  63. input = increase_one(input);
  64. return next_palin_for_me(input);
  65. }
  66.  
  67. int main() {
  68. int n, i;
  69. scanf("%d", &n);
  70. char input[1000010];
  71. for(i = 0 ; i < n ; i++){
  72. scanf("%s", input);
  73. char* result = next_palin(input);
  74. printf("%s\n", result);
  75. }
  76. return 0;
  77. }
  78.  
Success #stdin #stdout 0s 10288KB
stdin
8
97795375756122352572879826552151654387112262
1892388497169516734992356528466
19891859448286167812
47737795782241879811566697829238862994263278849942632926438725
857751275744476297149515661
699
5119783738665448121162642286
4177118624313412937235746451
stdout
97795375756122352572877827525322165757359779
1892388497169516159617948832981
19891859444495819891
47737795782241879811566697829233292879666511897814228759773774
857751275744474447572157758
707
5119783738665445668373879115
4177118624313443134268117714