C++ C+;中的abs()超出了时间限制+;程序

C++ C+;中的abs()超出了时间限制+;程序,c++,C++,我在程序中遇到abs()的问题。当我使用代码时: long long dvd = abs(dividend), dvs = abs(divisor); 已报告“超过时限” 使用时: long long dvd = dividend, dvs = divisor; dvd = abs(dvd); dvs = abs(dvs); 一切都很好 完整代码如下: class Solution { public: int divide(int dividend, int divisor) {

我在程序中遇到abs()的问题。当我使用代码时:

long long dvd = abs(dividend), dvs = abs(divisor);
已报告“超过时限”

使用时:

long long dvd = dividend, dvs = divisor;
dvd = abs(dvd);
dvs = abs(dvs);
一切都很好

完整代码如下:

class Solution {
public:
    int divide(int dividend, int divisor) {
    long long dvd = dividend, dvs = divisor;
    dvd = abs(dvd);
    dvs = abs(dvs);
    long long result = 0;

    while (dvd >= dvs) {
        long long temp = dvs;
        int i = 0;
        while (dvd >= temp) {
            temp = temp << 1;
            i++;
        }
        dvd -= dvs << (i-1);
        result += (long long)1 << (i-1);
    }

    result = ((long long)dividend > 0 ^ (long long)divisor > 0) ? -result : result;

    if (result > (1<<31) - 1)
        return (1<<31) - 1;

    return result;
  }
};
类解决方案{
公众:
整数除法(整数除数,整数除数){
长dvd=被除数,dvs=除数;
dvd=abs(dvd);
dvs=abs(dvs);
长结果=0;
而(dvd>=dvs){
长期温度=dvs;
int i=0;
同时(dvd>=temp){

temp=temp(1很可能
abs()
是定义如下的宏:

#define abs(x) (((x)<0)?-(x):(x))
如果除数
INT\u MIN
,那么
dvs
很可能是
INT\u MIN
。因此,它是负数

现在,稍后,您将:

        long long temp = dvs;
        int i = 0;
        while (dvd >= temp) {
            temp = temp << 1;
            i++;
        }

您已将参数类型更改为
abs()
long
,由
int
初始化。因此,如果
dvs
(long-long)int\u-MIN
,则
abs(dvs)
-(long-long)int\u-MIN
,则为正数,只要
sizeof(int)

你是在谈论编程竞赛吗?你能发布更多的代码吗?你提供给我们的一点点信息无法让我们知道。发布一个完整的小示例,显示失败的味道就像循环永远不会终止一样。使用调试程序逐步完成以下完整代码是可以的,leetcode接受。
int divide(int dividend, int divisor) {
    long long dvd = abs(dividend), dvs = abs(divisor);
        long long temp = dvs;
        int i = 0;
        while (dvd >= temp) {
            temp = temp << 1;
            i++;
        }
int divide(int dividend, int divisor) {
    long long dvd = dividend, dvs = divisor;
    dvd = abs(dvd);
    dvs = abs(dvs);