Reverse Integer

来源:互联网 发布:手机玩电音的软件 编辑:程序博客网 时间:2024/05/24 05:56

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

这是一道倒序输出整数的题目,给出的例也很简单。

// Reverse_Integer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<limits>
using namespace std;

int reverse(int x) {
    int i;
    if (x < 0)
    {
        i = -x;
        int p;
        int r = 0;
        while (i > 0)
        {
            p = i % 10;
            i = i / 10;
            if (r > INT_MAX / 10 || (r = INT_MAX/10 && p > INT_MAX % 10))
            {
                return 0;
            }
            //相加的时候就已经溢出,所以无论怎么判断都是没有溢出的,所以要在之前进行判断
            r = r * 10 + p;
        }
        return r;
    }
    else
    {
        i = x;
        int p;
        int r = 0;
        while (i > 0)
        {
            p = i % 10;
            i = i / 10;
            if (r > INT_MAX / 10 || (r == INT_MAX/10 && p > INT_MAX % 10))
            {
                return 0;
            }
            //相加的时候就已经溢出,所以无论怎么判断都是没有溢出的
            r = (r * 10) + p;
        }
        return r;
    }
        
}

int _tmain(int argc, _TCHAR* argv[])
{
    cout << reverse(123);
    return 0;
}

为了使得程序更加直观,将负数和非负数分来,当绕这对于复杂度没有改变。

题目中最重要的就是设置溢出条件,这一组溢出的例子是后加上去的。

溢出的条件给的要全面。题目中都是有符号的,所以用INT_MAX就可以。包含在limits头文件内。

综上所述:解决主要问题的代码很容易想到,但是想到极端的输入就不简单了,所以对于简单的问题,要以更加全面的眼光看待。

0 0
原创粉丝点击