LeetCode 7 Reverse Integer

LeetCode 7 Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321
Example 2:

Input: -123
Output: -321
Example 3:

Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows
解:

#include<stdio.h>
#include<stdlib.h>
#include<climits>
#define BASE 10
int reverse(int x) {
    const int MAX=INT_MIN;
    int sign;
//    div to x=0 x<0 x>0  
    if(x==0)
    {
        return 0;
    }
    if(x>0)
    {
        sign=1;
        x=-x;
    }
    else
    {
        sign=-1;
    }
    int output=0;
    while(x!=0)
        {
//        	tmp为负数 为x的取值的最后一位的负数 即为x的对BASE取余的数值 
        int tmp=x%BASE;
//		如果 输出的结果比MAX-tmp(即为MAX(INT_MIN(int的最小值))+x的取余的数值的正数)再对10取余;如果output比其小则溢出 
//      第一次的时候即为output=0的时候 MAX-tmp/BASE 取余为负数 不可能溢出
//		接下来的中output 乘以BASE+tmp(负数) 一定为负数 
        if(output<(MAX-tmp)/BASE)
        {
            return 0;
        }
        else{
            output=output*BASE+tmp;
        }
        x=(x-tmp)/BASE;
    }
    return sign*abs(output);
}

设计知识

  • climits 头文件的使用
  • 设置标志
  • 问题的划分

climits 头文件

给定各个数据类型的最大的取值范围

posted @ 2018-08-17 22:37  aclihui  阅读(79)  评论(0编辑  收藏  举报