D**********d 发帖数: 849 | 1 可以用二进制移位 << >> 完成。
int divide(int dend, int dor) {
if(dend == 0 || dor == 0 ) return 0;
bool IsNegative = false;
if(dend < 0){
IsNegative = !IsNegative;
dend = -dend;
}
if(dor < 0){
IsNegative = !IsNegative;
dor = -dor;
}
int k;
// align
for(k = 0; (dend >= dor); ++k) dor <<= 1;
if(k>0)dor >>= 1;
// calculate
int result = 0;
while(k > 0){
if(dend>=dor){
dend -= dor;
result &= (1 << k);
}
... 阅读全帖 |
|
O******i 发帖数: 269 | 2 写了一个,要考虑的情况真多...
假定是16位整数,范围是-32768到+32767
bool my_atoi(const char* str, int16& num)
{
if (str == NULL || str[0] == '\0')
return false;
int i = 0;
bool IsNeg = (str[0] == '-')? true : false;
if (str[0] == '+' || str[0] == '-')
{
if (str[1] == '\0')
return false;
i = 1;
}
num = 0;
const int num_limit = 3276;
const int digit_limit = (IsNeg)? 8 : 7;
int digit = 0;
bool max_int_reached = false;
for (; str[... 阅读全帖 |
|
g*********8 发帖数: 64 | 3 int str2int(string s){
assert(s.length()>0);
bool isNeg=false;
unsigned int num=0,i=0,d=0;
if(s[0]=='-'){
isNeg=true;
i=1;
}
while(i
d=s[i]-'0';
num=num*10+d;
assert(d>=0&&d<=9);
assert(num<=INT_MAX);
i++;
}
if(isNeg) num=-1*num;
return num;
}
我写的代码,望指正,处理了溢出,负数,非数值,还有什么异常没有处理? |
|
s**********e 发帖数: 326 | 4 贴个我之前写的代码,仿照java里面的源码写的
public static long stringToLong(String str) throws Exception{
if(!chekValid(str)){
throw new Exception("invalid input!!");
}
long limit;
boolean isNegative = false;
int curIndex = 0;
if(str.charAt(0) == '-'){
limit = Long.MIN_VALUE;
isNegative = true;
curIndex = 1;
}else{
limit = -1 * Long.MAX_VALUE;
}
long preLimit = limit/10;
... 阅读全帖 |
|
l*****n 发帖数: 577 | 5 来自主题: JobHunting版 - 面经(L) 说实话,LinkedIn 是我面试过的相当拖拉的公司。看到不少人因电话面试3,4天就感觉
没戏了,我都忍不住地想,太着急了。以下是我的经历,相当拖拉。我写得也挺拖拉,
但希望对面试他家的朋友有所帮助。
1.初接触
在去年6月,我通过版上的一朋友推荐,到现在大概8个月了,才算结束。当然这其中也
有我的因素。
我给那朋友发了email包括我的简历,他并没有回,所以我一直不知道是有人推荐,也不
知道推荐人名字。直到后来recuiter问(可能是为了confirm reference bonus),才想
起来查以前发出的email。
recuiter到7月中旬才联系我。我还以为他在网上找到的我呢。我只在linkedin放了简
单的简历,也没有对外公开。记得但是对被发现感到比较惊奇。但是,我看了一下job
description,不很match.我就把面试推了。但是表示了对公司的强烈兴趣,并同意看看
他家其他的工作,有合适的联系他。
到十月中旬,recruiter又联系我。但是,我此时在中国,正好度一个一个月的长假。
只好在十一月再面试。面试SET position.
2.初次phone(rec... 阅读全帖 |
|
w****f 发帖数: 684 | 6 今天的一个电面, Implement itoa() with C++ and give test cases!
string intToStr(int n)
{
bool isNeg =false;
if(n<0) {
isNeg =true;
n *= -1;
}
string str;
do {
str += (char) ( n%10 + "0");
n /=10;
} while(n>0);
if(isNeg) str += "-";
int nstr=str.size();
for( int i=0; i
string ct = str[i];
str[i] = str[ nstr-1 -i];
str[nstr-1-i] =ct;
}
return str;
}
test cases: 123, -123, 0, 1, 123456789
可interviewer 说我漏了一种test c... 阅读全帖 |
|
w****f 发帖数: 684 | 7 find one solution to fix INT_MIN problem
string intToStr(int n)
{
bool isNeg=false;
if(n<0) isNeg=true;
string str;
do {
str += (char) ( abs(n%10) + '0');
n /=10;
} while(n>0);
if(isNeg) str += '-';
int nstr=str.size();
for( int i=0; i
string ct = str[i];
str[i] = str[ nstr-1 -i];
str[nstr-1-i] =ct;
}
return str;
} |
|
w***o 发帖数: 109 | 8
好像不是Constant time。任然是O(lgn)。而且还可以简化:
public class Solution {
public double pow(double x, int n) {
boolean isNeg = n < 0;
if(n < 0)
n = -n;
double ret = 1.0;
while(n>0) {
if((n&1) >0)
ret *= x;
x *= x;
n >>= 1;
}
return isNeg? 1.0/ret : ret;
}
} |
|
z****g 发帖数: 1978 | 9 其实还有更简单的
假设数据存在list a里
bool IsNegaitve(int left, int right){ return left<0 && right>0; };
a.sort();
这个应该就可以了,原理上是nlog(n)的全排序,但是因为只有left<0, right>0才是正
序,所以应该是n要快 |
|