LeetCode 문제 풀이 -- 8. String to Integer (atoi)
Github 문제 풀이:https://github.com/gatieme/LeetCode/tree/master/008-StringToInteger
CSDN 문제 풀이:http://blog.csdn.net/gatieme/article/details/51046065
제목.
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10): The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.
문자열 이 표시 하 는 숫자 를 정수 형식 으로 변환 합 니 다.
분석 하 다.
간단 한 문 제 는 다음 과 같은 코드 가 주요 프레임 워 크 입 니 다.
for (; *str != '\0'; str++)
{
if ('0' <= *str && *str <= '9')
{
value *= 10;
value += *str - '0';
#ifdef DEBUG
printf("value = %lld
", value);
#endif
}
else
{
break;
}
}
하지만 주의해 야 할 문제 는
//
while (*str == ' ' || *str == '
' || *str == '\t') //
{
str++;
}
// + -
if (*str == '+')
{
str++;
}
else if (*str == '-')
{
str++;
minus = true;
}
// OVER_FLOW
// INT_MAX 2147483647
// INT_MIN -2147483648 minus = true
if((minus == true && value > (unsigned long)(INT_MAX) + 1) // INT_MAX + 1
|| (minus == false && value > INT_MAX)) // INT_MAX
{
debug <<value <<", " <<INT_MAX + 1 <<endl;
debug <<"to max than int" <<endl;
break;
}
만약 에 마지막 으로 발생 할 수 있 는 문 제 를 판단 한다 면 우리 value 가 무엇으로 저장 하 든 롱, 롱 롱 은 모두 표시 범위 가 있 고 넘 침 이 존재 하기 때문에 문자열 이 너무 길 면 넘 침 이 있 고 넘 침 후에 절단 이 발생 하거나 심지어 마이너스 로 읽 을 수 있 기 때문에 우 리 는 순환 이 끝 난 후에 판단 할 수 없다.
코드
/************************************************************************* > File Name: atoi.c > Author: GatieMe > Mail: [email protected] > Created Time: 2016 04 02 22 22 06 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <limits.h>
#define __tmain main
int myAtoi(const char *str)
{
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (str == NULL)
{
return 0;
}
//
while (*str == ' ' || *str == '
' || *str == '\t') //
{
str++;
}
bool minus = false;
// + -
if (*str == '+')
{
str++;
}
else if (*str == '-')
{
str++;
minus = true;
}
long long int value = 0;
for (; *str != '\0'; str++)
{
if ('0' <= *str && *str <= '9')
{
value *= 10;
value += *str - '0';
#ifdef DEBUG
printf("value = %lld
", value);
#endif
}
else
{
break;
}
// OVER_FLOW
// INT_MAX 2147483647
// INT_MIN -2147483648 minus = true
if((minus == true && value > (unsigned long)(INT_MAX) + 1) // INT_MAX + 1
|| (minus == false && value > INT_MAX)) // INT_MAX
{
break;
}
}
if (minus == true)
{
value = -value;
}
if (value > INT_MAX)
{
value = INT_MAX;
}
else if (value < INT_MIN)
{
value = INT_MIN;
}
return (int)value;
}
int __tmain(void)
{
printf("%d", myAtoi("9223372036854775809"));
return EXIT_SUCCESS;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.