C++ C+;中的abs()超出了时间限制+;程序
我在程序中遇到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) {
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);