【牛客网】反转数字

编程入门 行业动态 更新时间:2024-10-10 08:20:09

【牛客网】反转<a href=https://www.elefans.com/category/jswz/34/1771323.html style=数字"/>

【牛客网】反转数字

描述
给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果

1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231, 231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)

数据范围:

-231 <= x <= 231-1

示例1

输入:12
返回值:21

示例2

输入:-123
返回值:-321

示例3

输入:10
返回值:1

示例4

输入:1147483649
返回值:0

int reverse(int x) {int flag = 0;if (x < 0) {x = -x;flag = 1;}long long ret = 0;while (x) {ret = x % 10 + ret * 10;x /= 10;}if (flag == 1) {ret = -ret;}if (ret > pow(2,31)-1 || ret < -pow(2, 31)) {return 0;} else {return ret;}
}

注意:
1.为什么要将返回值 ret 定义成 long long 型是因为存在反转数字太大,若只设置四个字节会超出这个范围的最大数字或最小数字,最终只会将这个数字的后32个比特位截取然后赋值给 ret ,那么在最后的输出结果会不满足示例4。
2.若在自己的编译器上运行的话,会存在一个警告 :

warning C4244: “return”: 从“__int64”转换到“int”,可能丢失数据

为了避免这个警告,我们可以在最后返回语句上对 ret 进行强制类型转换,当然这个做法是不会产生问题的,因为既然能执行这一步那肯定该数字是在 [−231, 231 − 1]范围内的。

更多推荐

【牛客网】反转数字

本文发布于:2024-03-12 22:02:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732505.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数字   牛客网

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!