[关闭]
@DingCao-HJJ 2015-09-20T22:04:30.000000Z 字数 1110 阅读 1164

sicily_1000 A-B

sicily


题目

编程基础题,就是输入两个数A、B然后获得A-B的结果

代码

简单版

  1. // CopyRight (c) HuangJunjie@SYSU(SNO:13331087). All Rights Reserved.
  2. #include<iostream>
  3. using std::cin;
  4. using std::cout;
  5. int main() {
  6. int a, b;
  7. cin >> a >> b;
  8. cout << a - b << endl;
  9. return 0;
  10. }

高精度版

  1. // CopyRight (c) HuangJunjie@SYSU(SNO:13331087). All Rights
  2. #include<stdio.h>
  3. #include<string.h>
  4. char* strrev(char* str) {
  5. char *h = str, *t = str, ch;
  6. while (*t++) {}
  7. t -= 2;
  8. while (h < t) {
  9. ch = *h;
  10. *h++ = *t;
  11. *t-- = ch;
  12. }
  13. }
  14. void substruct(char *big, char *small, char* result) {
  15. for (int i = 0; big[i] || small[i]; i++) {
  16. if (big[i] < small[i]) {
  17. big[i] += 10;
  18. big[i + 1]--;
  19. }
  20. if (!small[i]) small[i] += '0';
  21. result[i] = (big[i] - '0') - (small[i] - '0') + '0';
  22. }
  23. }
  24. void Printf(char *c) {
  25. int i = 0;
  26. while (c[i++] == '0') {}
  27. if (!c[i]) printf("0");
  28. printf("%s", c + i - 1);
  29. printf("\n");
  30. }
  31. int main() {
  32. char a[100 + 1] = { 0 }, b[100 + 1] = { 0 }, c[100 + 1] = { 0 };
  33. scanf("%s", a);
  34. scanf("%s", b);
  35. strrev(a);
  36. strrev(b);
  37. if (strlen(a) < strlen(b)) {
  38. substruct(b, a, c);
  39. printf("-");
  40. } else if (strlen(a) > strlen(b)) {
  41. substruct(a, b, c);
  42. } else {
  43. for (int i = strlen(a) - 1; i >= 0; i--) {
  44. if (a[i] == b[i]) {
  45. if (i) {
  46. continue;
  47. } else {
  48. c[i] += '0';
  49. }
  50. } else if (a[i] > b[i]) {
  51. substruct(a, b, c);
  52. break;
  53. } else if (a[i] < b[i]) {
  54. substruct(b, a, c);
  55. printf("-");
  56. break;
  57. }
  58. }
  59. }
  60. strrev(c);
  61. Printf(c);
  62. return 0;
  63. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注