本题要求实现一个求整数的逆序数的简单函数。

函数接口定义:

int reverse( int number );

其中函数reverse须返回用户传入的整型number的逆序数。

裁判测试程序样例:

#include <stdio.h>

int reverse( int number );

int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", reverse(n));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

-12340

输出样例:

-4321
#include <stdio.h>
#include <math.h>
int reverse(int);
int main(int argc, const char *argv[])
{
    int n;
    scanf("%d",&n);
    printf("%d\n",reverse(n));
    return 0;
}
int reverse(int number)
{
    //int max = pow(2,31)-1;
    int max = 2147483647;
    long long result = 0;
    for(;number != 0; number/=10)
    {
        result = result*10 + number%10;
    }
    int r = (int)result;
    if(r == result)//未超出int取值范围情况
    {
        return result;
    }
}

总结

思路:每次取出整数的个位加上上一轮的结果result*10,直到取完整数的每一位。

问题:int类型的取值范围最大只能取到2^31-1=2147483647,如果逆序后的数值大于这个值会造成数据溢出。因此需要对逆序后的值加以判断限制一下。

限制思路:定义一个long long类型的变量result来记录逆序后的值,逆序结束后将result强行转换成int类型,若没有数据溢出,强行转换前后result的值相等;若不相等则说明溢出了。

Last modification:2021 年 03 月 27 日 17 : 33 : 01