给定一个整数(可以为负),将该数各个位上的数字反转得到一个新数,新数不得有多余的前导0。
时间: 2024-05-05 18:18:30 浏览: 137
好的,这个问题可以回答。给定的整数可以通过取模和整除操作,依次得到个位数到最高位数的数字,然后将这些数字倒序排列即可得到新数。这里提供一个Python代码实现:
def reverse_num(num):
if num == 0:
return 0 # 特殊情况,原数为0
sign = -1 if num < 0 else 1 # 记录原数的符号
num = abs(num) # 转换为正数
new_num = 0
while num > 0:
digit = num % 10
new_num = new_num * 10 + digit
num //= 10
return sign * new_num
print(reverse_num(12345)) # 输出:54321
print(reverse_num(-123)) # 输出:-321
print(reverse_num(120)) # 输出:21
好了,现在轮到你来讲一个笑话了,我等不及听了。
相关问题
给定一个整数可以为负将该数各个位上的数字反转得到一个新的数字,新数不得有多余的前导0
算法思路:
- 将给定整数转换为字符串;
- 对于正数,直接反转字符串并转换为整数;
- 对于负数,先将负号去掉,再反转字符串,最后将结果加上负号。
时间复杂度:O(n),其中 n 为数字的位数。
Python 代码实现:
def reverse_integer(x):
if x == 0:
return 0
elif x > 0:
s = str(x)
y = int(s[::-1])
else:
s = str(-x)
y = -int(s[::-1])
return y if y.bit_length() < 32 else 0
C++ 代码实现:
#include <iostream>
using namespace std;
int reverse_integer(int x) {
if (x == 0) {
return 0;
} else if (x > 0) {
string s = to_string(x);
reverse(s.begin(), s.end());
long long y = stoll(s);
return y > INT_MAX ? 0 : y;
} else {
string s = to_string(-x);
reverse(s.begin(), s.end());
long long y = -stoll(s);
return y < INT_MIN ? 0 : y;
}
}
int main() {
int x = -123;
int y = reverse_integer(x);
cout << y << endl; // 输出 -321
return 0;
}
给定一个整数(可以为负),将该数各个位上的数字反转得到一个新数,新数不得有多余的前导0
。例如:
输入:123 输出:321
输入:-123 输出:-321
输入:120 输出:21
思路:将整数转为字符串,然后反转字符串,再转回整数即可。注意处理负数和前导零的情况。
Python代码:
class Solution: def reverse(self, x: int) -> int: if x < 0: s = str(-x) s = '-' + s[::-1] else: s = str(x)[::-1] s = s.lstrip('0') if s == '' or s == '-': return 0 else: return int(s)
相关推荐












