小白一只,如有错误欢迎指正
目录
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
这题一看就比前两天的指针好写,这是我第一眼看到这道题的想法,事实证明我错了,当然可能是我太菜的原因
翻转整数嘛,简单!不断对原数取余取出最后一位数,然后用取出的数组成新数(怎么感觉讲不太明白的样子)上代码
int x;
int y=0;
scanf("%d",&x);
while(x>0){
y=y*10+x%10;
x/=10;
}
//y的值为翻转后的数
代码尝试1
首先判断正负,然后翻转,然后报错了,提示溢出
代码尝试2
将y的类型换成double,然后试图用-2^31<=y<=2^31-1来判断,然后又报错
我百思不得其解,通过多次试验后发现^这个符号在C语言里没有意义,不表示乘方
后经百度发现C语言里的乘方可以用pow()函数来实现
其声明为double pow(double x, double y)
应用示例
#include<stdio.h>
#include<math.h>
int main()
{
printf("2^31=%f",pow(2,31));
return 0;
}
代码尝试3
在浏览题解的时候发现有个很方便的方法判断y是否超过32 位的有符号整数的范围,即令y的类型为double,然后将其强制转换成int,判断与原来的y是否相等
但是还是报错了,这次的原因是x溢出,因为int的范围为[-2^31,2^31-1],由于零的存在,正数的个数比负数个数少了一个,当x=-2^31时,对x取负,x就会溢出。
x的类型为int是题目给的,不能将其改成double,于是放弃将x绝对值化,直接进行取余,因为我发现x是负数的时候取余会把负号带上