• SDNUOJ 1301.判断相等


    给定两个数A和B(长度不超过100),判断A和B是否相等。

    有几个特殊样例需要过:

    -0 = 0

    -0001.10 = -1.1

    01.0020 = 1.0020000000

    做法:

    符号单独看。以小数点为分界线,处理左边和右边,去除前导或者后导零。

    1. #include
    2. typedef long long ll;
    3. using namespace std;
    4. string a, b;
    5. bool solve1()
    6. {
    7. int pos = 1000, pos2 = 1000;
    8. std::vector<int> A, B;
    9. for (int i = 0; i < a.size(); i ++ ) {
    10. if(a[i] == '.'){pos = i; break;}
    11. A.push_back(a[i] - '0');
    12. }
    13. reverse(A.begin(), A.end());
    14. while(A.size() > 1 && A.back() == 0) A.pop_back();
    15. for (int i = 0; i < b.size(); i ++ ) {
    16. if(b[i] == '.'){pos2 = i; break;}
    17. B.push_back(b[i] - '0');
    18. }
    19. reverse(B.begin(), B.end());
    20. while(B.size() > 1 && B.back() == 0) B.pop_back();
    21. if(A.size() != B.size()) return false;
    22. for (int i = 0; i < A.size(); i ++ ) {
    23. if(A[i] != B[i]) return false;
    24. }
    25. A.clear();
    26. B.clear();
    27. for (int i = pos + 1; i < a.size(); i ++ ) {
    28. A.push_back(a[i] - '0');
    29. }
    30. for (int i = pos2 + 1; i < b.size(); i ++ ) {
    31. B.push_back(b[i] - '0');
    32. }
    33. while(A.size() > 0 && A.back() == 0) A.pop_back();
    34. while(B.size() > 0 && B.back() == 0) B.pop_back();
    35. for (int i = 0; i < A.size(); i ++ ) {
    36. if(A[i] != B[i]) return false;
    37. }
    38. return true;
    39. }
    40. bool solve2()
    41. {
    42. int pos = 1000, pos2 = 1000;
    43. std::vector<int> A, B;
    44. for (int i = 1; i < a.size(); i ++ ) {
    45. if(a[i] == '.'){pos = i; break;}
    46. A.push_back(a[i] - '0');
    47. }
    48. reverse(A.begin(), A.end());
    49. while(A.size() > 1 && A.back() == 0) A.pop_back();
    50. for (int i = 1; i < b.size(); i ++ ) {
    51. if(b[i] == '.'){pos2 = i; break;}
    52. B.push_back(b[i] - '0');
    53. }
    54. reverse(B.begin(), B.end());
    55. while(B.size() > 1 && B.back() == 0) B.pop_back();
    56. if(A.size() != B.size()) return false;
    57. for (int i = 0; i < A.size(); i ++ ) {
    58. if(A[i] != B[i]) return false;
    59. }
    60. A.clear();
    61. B.clear();
    62. for (int i = pos + 1; i < a.size(); i ++ ) {
    63. A.push_back(a[i] - '0');
    64. }
    65. for (int i = pos2 + 1; i < b.size(); i ++ ) {
    66. B.push_back(b[i] - '0');
    67. }
    68. while(A.size() > 0 && A.back() == 0) A.pop_back();
    69. while(B.size() > 0 && B.back() == 0) B.pop_back();
    70. for (int i = 0; i < A.size(); i ++ ) {
    71. if(A[i] != B[i]) return false;
    72. }
    73. return true;
    74. }
    75. int main(){
    76. //std::ios::sync_with_stdio(false);
    77. //std::cin.tie(nullptr);
    78. while(cin >> a >> b)
    79. {
    80. int cnt = 0;
    81. if(a[0] == '-') cnt ++;
    82. if(b[0] == '-') cnt ++;
    83. if(cnt == 1) {
    84. bool f = 0;
    85. for (int i = 1; i < a.size(); i ++ ) {
    86. if(a[i] != '0' && a[i] != '.') f = 1;
    87. }
    88. for (int i = 1; i < b.size(); i ++ ) {
    89. if(b[i] != '0' && b[i] != '.') f = 1;
    90. }
    91. cout << (f == 1 ? "no\n" : "yes\n");
    92. }
    93. else {
    94. if(cnt == 2)
    95. if(solve2())cout << "yes\n";
    96. else cout << "no\n";
    97. else if(solve1())cout << "yes\n";
    98. else cout << "no\n";
    99. }
    100. }
    101. return 0;
    102. }

  • 相关阅读:
    CSP-J/S信息学奥赛-数据结构
    毕业设计 基于STM32单片机的二轮平衡小车
    【网络丢包,网络延迟?这款神器帮你搞定所有!】
    服务领域模型
    math_三角升幂/降幂/微积分公式填空
    做一个Springboot文件上传-阿里云
    我的创作纪念日
    【信号处理】Matlab实现希尔伯特-黄变换
    Python面向对象
    【GPGPU编程模型与架构原理】第一章 1.1 GPGPU 与并行计算机
  • 原文地址:https://blog.csdn.net/IsayIwant/article/details/126674947