fork(1) download
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<cstring>
  4.  
  5. using namespace std;
  6.  
  7. bool all9(int num[],int n)
  8. {
  9. for(int i=0;i<n;i++)
  10. {
  11. if(num[i]!=9)
  12. return false;
  13. }
  14. return true;
  15. }
  16.  
  17. void printnum(int num[],int n)
  18. {
  19. for(int i=0;i<n;i++)
  20. {
  21. printf("%d",num[i]);
  22. }
  23. printf("\n");
  24.  
  25. }
  26.  
  27. void genNextP(int num[],int n)
  28. {
  29. int mid = n/2;
  30. int l=mid-1;
  31. int r=(n%2)?mid+1:mid;
  32. bool flag;
  33. if(all9(num,n))
  34. {
  35. printf("1");
  36. for(int i=1;i<n;i++)
  37. {
  38. printf("0");
  39. }
  40. printf("1\n");
  41. }
  42. else
  43. {
  44. while(l>=0&&num[l]==num[r])
  45. {
  46. l--;
  47. r++;
  48. }
  49. if(l<0 || num[l]<num[r]) //case 1: given is palindrome
  50. {
  51. flag = true;
  52. }
  53. while(l>=0)
  54. {num[r]=num[l];l--;r++;}
  55.  
  56. if(flag)
  57. {
  58. int carry=1;
  59. l=mid-1;
  60. r=(n%2)?mid+1:mid;
  61. if((n%2))
  62. {
  63. num[mid]+=carry;
  64. carry=(num[mid])/10;
  65. num[mid]=(num[mid])%10;
  66. }
  67. while(l>=0){
  68. num[l]+=carry;
  69. carry=(num[l])/10;
  70. num[l]=(num[l])%10;
  71. num[r]=num[l];
  72. l--;r++;
  73. }
  74.  
  75. }
  76.  
  77. printnum(num,n);
  78. }
  79. }
  80.  
  81.  
  82. int main()
  83. {
  84. int num[1000007],t;
  85. unsigned long int l;
  86. char s[1000007];
  87. scanf("%d",&t);
  88. while(t--)
  89. {
  90. scanf("%s",s);
  91. l=strlen(s);
  92. for(unsigned long int i=0;i<l;i++)
  93. num[i]=s[i]-48;
  94. genNextP(num,l);
  95. }
  96. return 0;
  97. }
  98.  
Success #stdin #stdout 0s 7904KB
stdin
3
1
2
3
stdout
2
3
4