这道题相对比较简单,主要是有一些要注意的点,
第七题:
输入:一个有符号的32位整形数
输出:将这个数反转后返回,保留符号位,如果反转后出现越界则返回0
1、不使用64位的变量
2、出现越界后返回了0,
第八题:
输入:字符串
输出:数字
第七题
#define MAX_VAL (2147483647)
#define MIN_VAL (-2147483647)
int reverse(int x){
char is_negative = 0;
int ret = 0;
if(x < 0)
is_negative = 1;
while (x)
{
//判断是否越界
if(!is_negative && (ret > MAX_VAL/10)) {
return 0;
} else if(is_negative && (ret < MIN_VAL/10)) {
return 0;
}
ret *= 10;
//判断是否越界
if(!is_negative && ret > (MAX_VAL - (x % 10))) {
return 0;
} else if(is_negative && (ret < MIN_VAL - (x % 10))) {
return 0;
}
ret += x % 10;
//printf("ret=%d\n");
x /= 10;
}
return ret;
}
第八题:
#define MAX_VAL (2147483647)
#define MIN_VAL (-2147483648)
int myAtoi(char *s)
{
char is_negative = 0;
char get_num = 0;
char over = 0;
int ret = 0;
char i = 0;
while (s) {
if (*s != ' ') {
if (*s <= '9' && *s >= '0') {
char val;
get_num = 1;
if(ret > MAX_VAL / 10) {
over = 1;
break;
}
ret *= 10;
val = *s - '0';
if(ret > MAX_VAL - val) {
over = 1;
break;
}
ret += val;
} else if ((*s == '-'|| *s == '+') && !get_num) {
if(*s == '-')
is_negative = 1;
get_num = 1;
} else {
break;
}
} else if(get_num) {
break;
}
s++;
}
if(over && !is_negative) {
ret = MAX_VAL;
} else if(over && is_negative) {
ret = MIN_VAL;
} else if (is_negative) {
ret = (-1) * ret;
}
return ret;
}
其实这里如果刚好等于最大值会出错^ ^