r**h 发帖数: 1288 | 1 由于这个数在正整数中没有对应的数,因此很多时候都要单独处理,不过总觉得把这一
个情况单列出来搞得代码不好看。请问一般来说有什么比较好的处理方法吗?
比如说pow(x),我的代码是这样的, 1<<31的情况单独处理了:
double pow(double x, int n) {
if(n == 0) return 1;
if(x==0 || x==1) return x;
if(n < 0){
if(n == (1<<31)){
double tmp = pow(1/x, 1<<15);
return tmp*tmp;
}
else
return pow(1/x, -n);
}
double tmp = pow(x, n>>1);
if(n&1)
return tmp*tmp*x;
else
return tmp*tmp;
} | c****p 发帖数: 6474 | 2 这种应该考虑用unsigned int或者long
【在 r**h 的大作中提到】 : 由于这个数在正整数中没有对应的数,因此很多时候都要单独处理,不过总觉得把这一 : 个情况单列出来搞得代码不好看。请问一般来说有什么比较好的处理方法吗? : 比如说pow(x),我的代码是这样的, 1<<31的情况单独处理了: : double pow(double x, int n) { : if(n == 0) return 1; : if(x==0 || x==1) return x; : if(n < 0){ : if(n == (1<<31)){ : double tmp = pow(1/x, 1<<15); : return tmp*tmp;
| b*****o 发帖数: 715 | 3 边界条件单独处理本来就是考点呀~
另外,我觉得就style来说,有些问题:
(1)最好不要用1<<31这种隐含的表达方式,而是应该用INT_MIN。
(2)1<<15这种表达也要避免。面试官会质疑你就移植性考虑,怎么知道将来int还是
32位呢?
(3)if有时有{,有时没有。style inconsistency是面试的大忌。
【在 r**h 的大作中提到】 : 由于这个数在正整数中没有对应的数,因此很多时候都要单独处理,不过总觉得把这一 : 个情况单列出来搞得代码不好看。请问一般来说有什么比较好的处理方法吗? : 比如说pow(x),我的代码是这样的, 1<<31的情况单独处理了: : double pow(double x, int n) { : if(n == 0) return 1; : if(x==0 || x==1) return x; : if(n < 0){ : if(n == (1<<31)){ : double tmp = pow(1/x, 1<<15); : return tmp*tmp;
| r**h 发帖数: 1288 | 4 很好的建议,太谢谢了!
【在 b*****o 的大作中提到】 : 边界条件单独处理本来就是考点呀~ : 另外,我觉得就style来说,有些问题: : (1)最好不要用1<<31这种隐含的表达方式,而是应该用INT_MIN。 : (2)1<<15这种表达也要避免。面试官会质疑你就移植性考虑,怎么知道将来int还是 : 32位呢? : (3)if有时有{,有时没有。style inconsistency是面试的大忌。
| n******n 发帖数: 567 | |
|