Guest User

Untitled

a guest
Apr 23rd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. char num[81];
  4. int len, halflen;
  5.  
  6. void process(void);
  7.  
  8. int myinc(int pos) {
  9. int i;
  10. if(pos>=0) {
  11. if(num[pos]!='9')
  12. num[pos]++;
  13. else {
  14. num[pos] = '0';
  15. myinc(pos-1);
  16. }
  17. return 0;
  18. } else {
  19. for(i=len; i>0;i--) num[i] = num[i-1];
  20. num[0] = '1';
  21. len++;
  22. num[len] = 0;
  23. halflen = len >> 1;
  24. return 1;
  25. }
  26. }
  27.  
  28. void decrease(int a) {
  29. int can = 0, i, p;
  30. for(p=halflen; p<len; p++) if(num[p] != '9') break;
  31. for(i=p+1; i<len; i++) can += num[i] - '0';
  32. if(can) can--;
  33. if(can>=a) {
  34. for(i=len-1; i>=halflen; i--) {
  35. if(num[i]-'0' > a) {
  36. num[len-1] = num[i]-a-1;
  37. if(i != len-1) num[i] = '0';
  38. myinc(i-1);
  39. return;
  40. } else {
  41. a -= num[i]-'0';
  42. num[i] = '0';
  43. }
  44. }
  45. } else {
  46. if(myinc(p-1)) p++;
  47. for(i=p; i<len; i++) num[i] = '0';
  48. process();
  49. }
  50. }
  51.  
  52. void increase(int a) {
  53. int can = 0, i;
  54. for(i=halflen; i<len; i++) can += '9' - num[i];
  55. if(can>=a) {
  56. for(i=len-1; i>=halflen; i--)
  57. if('9'-num[i] > a) {
  58. num[i] += a;
  59. break;
  60. } else {
  61. a -= '9'-num[i];
  62. num[i] = '9';
  63. }
  64. } else {
  65. myinc(halflen-1);
  66. for(i=halflen; i<len; i++) num[i] = '0';
  67. process();
  68. }
  69. }
  70.  
  71. void process(void) {
  72. int left = 0, right = 0, i;
  73. for(i=0; i<halflen; i++) left += num[i]-'0';
  74. for(i=halflen; i<len; i++) right += num[i]-'0';
  75. if(left==right) return;
  76. if(left>right)
  77. increase(left-right);
  78. else
  79. decrease(right-left);
  80. }
  81.  
  82. int main(void) {
  83. int i;
  84. char c = '0';
  85. while(c=='0') scanf("%c", &c);
  86. for(i=0; c!='\n'; i++) {
  87. num[i] = c;
  88. scanf("%c", &c);
  89. }
  90. if(i) {
  91. num[i] = 0;
  92. len = i;
  93. halflen = len>>1;
  94. process();
  95.  
  96. printf("%s\n", num);
  97. } else
  98. printf("0\n");
  99. return 0;
  100. }
Add Comment
Please, Sign In to add comment