C++很多人快写的bug
small_lemon_qwq · · 个人记录
很多人的快写:
template<typename T>
void writeT(T x){
if(x<0) putchar('-'),x=-x;
if(x>9) writeT(x/10);
putchar(x%10+'0');return;
}
void write(int x){
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
但是输出INT_MIN、LONG_LONG_MIN时就会发生这样的问题:
简直要 : - (了
为什么呢?
(以
所以代码要这样写:
template<typename T>
void write(T x){
if(x<0){
cout<<'-';
if(x<-9){
write(-(x/10));
}
putchar(-(x%10)+'0');
}else if(x>=0&&x<=9){
putchar(x+'0');
}else{
write(x/10);
putchar(x%10+'0');
}
}
感谢 yukimianyan 发现我输出-1时有bug
原代码:
template<typename T>
void write(T x){
if(x<0){
cout<<'-';
write(-(x/10));
putchar(-(x%10)+'0');
}else if(x>=0&&x<=9){
putchar(x+'0');
}else{
write(x/10);
putchar(x%10+'0');
}
}