反转数字
反转数字
https://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a?tab=answerKey
题目描述
将给出的32位整数x翻转。
例1:x=123,返回321
例2:x=-123,返回-321
翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。
示例1
输入
-123
返回值
-321
这道题的思路:
先将数据从后往前分离 -再将分离后的数据从前往后组合输出
以例子456 - 反转后 654
1、输入一个数x=456
2、循环这里使用while(条件是:x !=0)
{
将456每个从后往前位上的数字拿出来,在使用方法将他们从前往后组合在一起
456
第一次 6
剩余数45
第二次 5
剩余数 4
拿到的数字为: 6 、5 、4
组合方法:
第一次:
0X10+6 = 6
第二次:
6X10 +5 = 65
第三次:
65X10 + 4 = 654
3、输出即可
注意题目要求:
你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^{31}, 2^{31} − 1][−231,231−1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。
这个直接加一个判断即可
c++代码如下:
class Solution { public: /** * * @param x int整型 * @return int整型 */ int reverse(int x) { //1234--4321 // write code here int s = 0;//反转后的数字,初始值为0 while (x != 0) { int a = x % 10; // 用来保存每次分离后的数据 4 x /= 10;//去掉个位数之后的数据 123 //数据溢出,就返回 0。 if (s > INT_MAX ||s < INT_MIN ) return 0; s = s * 10 + a;//反转后数字输出. } return s; } };