本题要求实现一个求整数的逆序数的简单函数。
函数接口定义:
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的值相等;若不相等则说明溢出了。
本文链接:https://shengto.top/c/pat_52.html
转载时须注明出处及本声明