数字"/>
【牛客网】反转数字
描述
给定一个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]范围内的。
更多推荐
【牛客网】反转数字
发布评论