今天在做leetcode166:分数变小数的时候看题解的时候学到了bool类型进行异或运算
例如: 我们要计算num1/num2 根据结果判断时候要在string类型中加入负数那我们这样写代码即可
int num1=-5,num2=7;
string s;
if((num1>0)^(num2)>0) s.push_back('-')
这样的话如果num1和num2同时大于0或者同时小于0 那么异或之后结果为0 只有一个大于0一个小于0异或之后结果才为1
leetcode166题解:
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if(numerator==0) return string("0");
string res;
unordered_map<int,int> m;
int flag=0;
long _numerator=long(numerator);
long _denominator=long(denominator);
if(_numerator<0) {
_numerator*=-1;
flag++;
}
if(_denominator<0) {
_denominator*=-1;
flag++;
}
/*if(flag==1) res.push_back('-');*/ //此处可以不使用标志变量改用异或
if((_denominator>0) ^ (_numerator>0)) res.push_back('-');
long quotient=_numerator/_denominator;
long remain=_numerator%_denominator;
res+=std::to_string(quotient);
if(!remain) return res; //能够整除
res.push_back('.');
//开始计算小数部分
int k=1;
while(remain){
if(m.find(remain)==m.end()){
m[remain]=k++;
}
else {
k=k-m[remain];
break;
}
_numerator=long(remain*10);
quotient=_numerator/_denominator;
remain=_numerator%_denominator;
res.push_back(quotient+'0');
}
if(remain){
int pos=res.size()-k;
res.insert(pos,1,'(');
res.push_back(')');
}
return res;
}
};