fork(1) download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MIN(x,y) (((x) < (y)) ? (x) : (y))
  5. void usd(char *str, int strl)
  6. {
  7. strl--;
  8. for (int i = 0; i <= strl / 2; i++)
  9. {
  10. char temp = str[i];
  11. str[i] = str[strl - i];
  12. str[strl - i] = temp;
  13. }
  14. }
  15.  
  16. int main()
  17. {
  18. char str[3][10006];
  19. int mcheck1 = 0, mcheck2 = 0;
  20.  
  21. scanf("%s", str[0]);
  22. scanf("%s", str[1]);
  23.  
  24. //절대값 비교
  25.  
  26. char * bignum;
  27. char * smallnum;
  28.  
  29. if (strlen(str[0]) > strlen(str[1]))
  30. {
  31. bignum = str[0];
  32. smallnum = str[1];
  33. }
  34. else if (strlen(str[0]) < strlen(str[1]))
  35. {
  36. bignum = str[1];
  37. smallnum = str[0];
  38. }
  39. else
  40. {
  41. if (strcmp(str[0], str[1]) > 0)
  42. {
  43. bignum = str[0];
  44. smallnum = str[1];
  45. }
  46. else
  47. {
  48. bignum = str[1];
  49. smallnum = str[0];
  50. }
  51. }
  52.  
  53. if (bignum[0] == '-') mcheck1 = 1;
  54. if (smallnum[0] == '-') mcheck2 = 1;
  55.  
  56. if ((mcheck1 + mcheck2) % 2 == 0)
  57. {
  58. usd(bignum, strlen(bignum));
  59. usd(smallnum, strlen(smallnum));
  60.  
  61. int i = 0;
  62. int carry = 0;
  63. for (; smallnum[i] <= '9' && smallnum[i] >= '0'; i++)
  64. {
  65. int a, b;
  66. a = smallnum[i] - '0';
  67. b = bignum[i] - '0';
  68. str[2][i] = (a + b + carry) % 10 + '0';
  69. if (a + b + carry > 9) carry = 1;
  70. else carry = 0;
  71. }
  72. for (; bignum[i] <= '9' && bignum[i] >= '0'; i++)
  73. {
  74. int a = bignum[i] - '0';
  75. str[2][i] = (a + carry) % 10 + '0';
  76. if (a + carry > 9) carry = 1;
  77. else carry = 0;
  78. }
  79. if (carry == 1) str[2][i++] = '1';
  80. if (mcheck1 == 1) str[2][i++] = '-';
  81. str[2][i] = '\0';
  82.  
  83. usd(str[2], strlen(str[2]));
  84.  
  85.  
  86. }
  87.  
  88. else
  89. {
  90. usd(bignum, strlen(bignum));
  91. usd(smallnum, strlen(smallnum));
  92.  
  93. int i = 0;
  94. int carry = 0;
  95.  
  96. for (; smallnum[i] <= '9' && smallnum[i] >= '0'; i++)
  97. {
  98. int a, b;
  99. a = smallnum[i] - '0';
  100. b = bignum[i] - '0';
  101. if (b - a - carry < 0)
  102. {
  103. b = b + 10 - a - carry;
  104. carry = 1;
  105. }
  106. else
  107. {
  108. b = b - a - carry;
  109. carry = 0;
  110. }
  111. str[2][i] = b + '0';
  112. }
  113. for (; bignum[i] <= '9' && bignum[i] >= '0'; i++)
  114. {
  115. int b = bignum[i] - '0';
  116. if (b - carry < 0)
  117. {
  118. b = b + 10 - carry;
  119. carry = 1;
  120. }
  121. else
  122. {
  123. b = b - carry;
  124. carry = 0;
  125. }
  126. str[2][i] = b + '0';
  127. }
  128. while(str[2][i - 1] == '0') i--;
  129. if (mcheck1 == 1) str[2][i++] = '-';
  130. str[2][i] = '\0';
  131. usd(str[2], strlen(str[2]));
  132. }
  133. for(int i = 0; i < strlen(str[2]); i++)
  134. {
  135. if(str[2][i] == '-')
  136. {
  137. printf("%d", -1*(str[2][++i]-'0'));
  138. continue;
  139. }
  140. printf("%d", str[2][i]-'0');
  141. }
  142. return 0;
  143. }
Success #stdin #stdout 0s 9424KB
stdin
-100 100
stdout
48