剑指offer倒数第二道题,用long long 来存整数才能判断相乘是否溢出
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int atoi(const char *str) {
int i,signal=1;
long long sum=0;
if (str==NULL||*str==0)
{
return 0;
}
while(*str==' '||*str=='\t'||*str=='\n')
{
str++;
}
if (*str=='-'||*str=='+')
{
if (*str=='-')
{
signal=-1;
}
str++;
}
if (*str>'9'||*str<'0')
{
return 0;
}
while(*str)
{
if (*str>'9'||*str<'0')
{
return sum;
}
if (signal<0)
{
if (10*sum < INT_MIN)
{
return INT_MIN;
}
sum = sum*10 - *str + '0';//sum*10 + -( *str - '0')
if (sum < INT_MIN)
{
return INT_MIN;//-2147483648;-1;
}
}
else
{
if ( 10 * sum > INT_MAX)//if (10*sum<0)
{
return INT_MAX;
}
sum = sum*10 + *str - '0';//sum*10 + ( *str - '0')
if (sum > INT_MAX)
{
return INT_MAX;//(2147483647);
}
}
str++;
}
return sum;
}
int _tmain(int argc, _TCHAR* argv[])
{
char s[100]=" 10522545459";
cout<<atoi(s)<<endl;
system("pause");
return 0;
}
以后把主函数也贴上,便于测试了