每日一题:【LeetCode】7.整数翻转

小白一只,如有错误欢迎指正

目录

题目

思路

代码尝试1

代码尝试2

代码尝试3

最终代码


题目

给你一个 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是负数的时候取余会把负号带上

最终代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值