贝壳第一题相邻数的差,用字符串存储也没AC?

RT,楼主用的是 C++,一开始直接用 int 存,发现不对,后来改为 long long,还是不对
最后用字符串模拟减法,也只得到了 0.91,这道题写了好久,心态崩了。。
有朋友能检查检查我的代码么:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

bool cmp(string a, string b) {
  if (a.length() > b.length())
    return true;
  else if (a.length() == b.length())
    return a > b;
  return false;
}

string sub(string a, string b) {
  // 默认 a > b
  string res;
  if (false == cmp(a, b)) return sub(b, a);
  int i, j;
  int bit = 0;
  for (i = a.length() - 1, j = b.length() - 1; i >= 0, j >= 0; --i, --j) {
    int tempA = a[i] - '0';
    int tempB = b[j] - '0';
    tempA -= bit;
    bit = 0;
    if (tempA < tempB) {
      tempA += 10;
      bit = 1;
    }
    res += to_string(tempA - tempB);
  }
  for (i; i >= 0; --i) {
    int tempA = a[i] - '0';
    if (bit > 0) {
      tempA -= bit;
      bit = 0;
    }
    if (tempA < 0) {
      tempA += 10;
      bit = 1;
    }
    res += to_string(tempA);
  }
  reverse(res.begin(), res.end());
  return res;
}

int main ()
{
  int N;
  string res = "99999999999999999999999999999999999999999";
  string a, b;
  cin >> N;
  string * arr = new string [N + 1];
  for (int i = 0; i < N; ++i) {
    cin >> arr[i];
  }
  for (int i = 0; i < N - 1; ++i) {
    string thisRes = sub(arr[i], arr[i + 1]);
    if (cmp(res, thisRes)) {
      res = thisRes;
      a = arr[i];
      b = arr[i + 1];
    }
  }
  cout << a << " " << b;
  delete [] arr;
  return 0;
}


#贝壳找房##笔试题目#
全部评论
我用的long,过了
点赞 回复 分享
发布于 2019-08-10 22:17
long long可以AC
点赞 回复 分享
发布于 2019-08-10 22:57
Long可以AC
点赞 回复 分享
发布于 2019-08-10 23:10

相关推荐

10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务