比赛 防止浮躁的小练习v0.4 评测结果 AAAAAA
题目名称 增强的减法问题 最终得分 100
用户昵称 丿Mht丶闪电 运行时间 0.012 s
代码语言 C 内存使用 0.29 MiB
提交时间 2016-10-13 18:25:58
显示代码纯文本
  1. #include<string.h>
  2. #include<stdio.h>
  3. #define N (200)
  4. int comp(char *p, char *q, int n){
  5. if (n == 0){
  6. return 0;
  7. }
  8. return (*p == *q) ? comp(p + 1, q + 1, n - 1) : (*p - *q);
  9. }
  10. void swap(char *p, char *q, int n){
  11. if (n == 0){
  12. return;
  13. }
  14. *p ^= *q ^= *p ^= *q;
  15. swap(p + 1, q + 1, n - 1);
  16. }
  17. int main()
  18. {
  19. freopen("sub.in","r",stdin);
  20. freopen("sub.out","w",stdout);
  21. int i, j, k;
  22. int c, c2, t, f;
  23. char x[N + 1], y[N + 1], r[N + 1];
  24. scanf("%s%s", x,y);
  25. j =strlen(x);
  26. if (j < N){
  27. for (i = j; i >= 0; i--){
  28. x[i+ (N - j)] =x[i];
  29. }
  30. for (i = 0; i < (N - j); i++){
  31. x[i]= 48;
  32. }
  33. }
  34. k =strlen(y);
  35. if (k < N){
  36. for (i = k; i >= 0; i--){
  37. y[i+ (N - k)] =y[i];
  38. }
  39. for (i = 0; i < (N - k); i++){
  40. y[i]= 48;
  41. }
  42. }
  43. t =comp(x, y, N);
  44. if (t < 0){ // x<y
  45. swap(x,y, N);
  46. }
  47. r[N] = 0;
  48. c2 = 0;
  49. for (i = N - 1; i >= 0; i--){
  50. if (c2 == 1){
  51. c= (x[i] <= y[i]) ? 1 : 0;
  52. r[i]= 48 + (x[i] - 1 + 10 - y[i]) % 10;
  53. }
  54. else{
  55. c= (x[i] < y[i]) ? 1 : 0;
  56. r[i]= 48 + (x[i] + 10 - y[i]) % 10;
  57. }
  58. c2= c;
  59. }
  60. f = -1;
  61. for (i = 0; i < N; i++){
  62. if (r[i] > 48){
  63. f= i;
  64. break;
  65. }
  66. }
  67. if (f == -1){
  68. f++;
  69. r[1]= 0;
  70. }
  71. if (t < 0){
  72. printf("-");
  73. }
  74. printf("%s\n", r +f);
  75. return 0;
  76. }