题目来源:
http://blog.163.com/prevBlogPerma.do?host=zhedahht&srl=25411174200731139971&mode=prev
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
/*
 * #define INT_MAX 2147483647   
 * #define INT_MIN (-INT_MAX-1) 
 */
enum Status {
    Success,
    Fail
};
enum Status ret;
int negative;
int
Str2Int(const char *input)
{
    long long num = 0;
    negative = 0;
    ret = Fail;
    if(input == NULL)
        return num;
    const char *ptr = input;
    if(*ptr=='+' || *ptr=='-') {
        if(*ptr == '-')
            negative = 1;
        ++ptr;
    }
    while(*ptr) {
        if(!(*ptr>='0' && *ptr<='9')) 
            return num;
        if((!negative && num>INT_MAX) || (negative && (-num)<INT_MIN)) 
            return num;
        num = num*10 + (*ptr-'0');
        ++ptr;
    }
    ret = Success;
    return num;
}
#define MAX_LEN 101
int
main(int argc, char **argv)
{
    int result;
    char value[MAX_LEN];
    while(scanf("%s", value) != EOF) {
        result = Str2Int(value);
        if(ret == Success)
            printf("%d\n", negative ? (-result) : result);
        else
            printf("Invalid\n");
    }
    return 0;
}