fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. char arr[1000002];
  4. int main(){
  5.  
  6. int len,mid,carry;
  7. int i,j,temp,flag;
  8. int t;
  9. scanf("%d",&t);
  10. while(t--){
  11. scanf("%s",arr);
  12. len=0;
  13. while(arr[len]!='\0'){
  14. len++;
  15. }
  16. mid=len/2;
  17. i=mid-1;
  18. j=len-1-i;
  19. carry=1;
  20. flag=0;
  21. while(i>=0){
  22. if(arr[i]>arr[j]){
  23. //left greater than right
  24. arr[j]=arr[i];
  25. i--;j++;
  26. flag=0;
  27. carry=0;
  28. break;
  29. }
  30. if(arr[i]==arr[j]){
  31. //left equal to right
  32. i--;j++;
  33. flag=1;
  34. continue;
  35. }
  36. if(arr[i]<arr[j]){
  37. //left less than right
  38. if(len%2){
  39. //odd length
  40. temp=arr[mid]-48;
  41. temp+=carry;
  42. carry=temp/10;
  43. temp%=10;
  44. arr[mid]=(temp+48);
  45. i=mid-1;j=len-1-i;
  46. flag=0;
  47. break;
  48. }
  49. else{
  50. //even length
  51. temp=arr[i]-48;
  52. temp+=carry;
  53. carry=temp/10;
  54. temp%=10;
  55. arr[i]=temp+48;
  56. arr[j]=arr[i];
  57. i--;j++;
  58. flag=0;
  59. break;
  60. }
  61. }
  62. }
  63. if(flag==1){
  64. i=mid-1;j=len-1-i;
  65. if(len%2){
  66. temp=arr[mid]-48;
  67. temp+=carry;
  68. carry=temp/10;
  69. temp%=10;
  70. arr[mid]=temp+48;
  71. }
  72. }
  73. while(i>=0){
  74. temp=arr[i]-48;
  75. temp+=carry;
  76. carry=temp/10;
  77. temp%=10;
  78. arr[i]=temp+48;
  79. arr[j]=arr[i];
  80. i--;j++;
  81. }
  82. if(len==1&&arr[0]!='9')
  83. printf("%c\n",arr[0]+1);
  84. else
  85. if(carry==0){
  86. printf("%s\n",arr);
  87. }
  88. else{
  89. printf("1");
  90. for(i=1;i<len;i++)
  91. printf("0");
  92. printf("1\n");
  93. }
  94. }
  95. return 0;
  96. }
  97.  
Success #stdin #stdout 0s 4320KB
stdin
38
23021
22031
12032
13022
12022
13922
43024
42023
32024
23041
243
24231
14232
23241
23234
243521
245321
243521
2442
2441
124356
0
1
2
8
9
10
11
17
22
99
100
1000000
101
121
245
133
199
stdout
Standard output is empty