int my_itoa(int val, char*buf) {
char* p2;
unsigned int a;//every digit
int len;
char *p1;//start of the digit char
char temp;
unsigned int u;
if (buf == NULL) {
return 0;
}
p2 = buf;
if (val < 0)
{
if (val == 0x80000000)//最小的数要硬编码,不然取负号会溢出
{
char *num = "-2147483648";
}
*p2++ = '-';
val = 0 - val;
}
u = (unsigned int)val;
p1 = p2;
do
{
a = u % 10;
u /= 10;
*p2++ = a + '0';
} while (u>0);
len = int(p2 - buf);
do {
temp = *p2;
*p2 = *p1;
*p1 = temp;
--p2;
++p1;
}while(p1<p2);
return len;
}
#define MAX ((int)0x7FFFFFFF)//符号0,其他全1
#define MIN ((int)0x80000000)//符号1,其他全0
int my_atoi(const char* str)
{
bool negative = false;
unsigned long result = 0;
if (str == NULL) {
return 0;
}
if (*str == '-')
{
negative = true;
str++;
}
else if (*str == '+')
str++;
if (*str<'0' || *str>'9')
{
return 0;
}
while (*str >= '0'&&*str <= '9') {
result = result * 10 + *str - '0';
//负数:小于最小值并且大于最大值
if ((negative&&result > MAX + 1) || (!negative&&result > MAX))
{
return 0;
}
str++;
}
if (negative) {
result *= -1;
}
return (int)result;
}