使用C++实现给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零
时间: 2024-04-30 18:23:40 浏览: 106
。例如,输入123,输出321;输入-321,输出-123。
代码如下:
```c
#include <stdio.h>
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
int main() {
int x = 123;
printf("%d\n", reverse(x));
int y = -321;
printf("%d\n", reverse(y));
return 0;
}
```
解释:
- reverse函数中,通过while循环逐位取出x中的数字,将其加入rev中,实现翻转数字的效果。
- 在加入rev之前,通过两个if语句判断翻转后的数字是否超过int类型的范围,若超过则返回0。这是因为在翻转数字时可能会出现溢出的情况,需要进行判断。
- 在main函数中,分别对123和-321进行翻转,打印结果。
相关问题
使用C++给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零
。示例:
输入:123
输出:321
输入:-123
输出:-321
输入:120
输出:21
解题思路:
我们可以将该整数从低位到高位的每一位数字依次取出,然后反转过来,最后组成一个新的整数。需要注意的是,如果原数为负数,则新数也应该为负数,且需要将原数的符号位去掉再进行反转。
代码实现:
int reverse(int x){
int flag = 1; // 标记正负号
if(x < 0){
flag = -1;
x = -x;
}
long long res = 0; // 新数
while(x){
res = res * 10 + x % 10;
x /= 10;
}
res *= flag; // 恢复符号
if(res > INT_MAX || res < INT_MIN) // 溢出判断
return 0;
return res;
}
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。每 11 行一个整数,表示反转后的新数,使用C++实现
以下是使用 C++ 实现的反转整数的代码:
```cpp
#include <iostream>
using namespace std;
int reverse(int n) {
int reversed = 0;
while (n != 0) {
reversed = reversed * 10 + n % 10;
n /= 10;
}
return reversed;
}
int main() {
int n;
cin >> n;
int reversed = reverse(n);
cout << reversed << endl;
return 0;
}
```
其中,`reverse()` 函数用于反转整数,`n % 10` 可以得到整数的个位数,`n / 10` 可以将整数去掉个位数,`reversed * 10 + n % 10` 可以将个位数添加到 `reversed` 的末尾。最后,使用 `cin` 输入整数,调用 `reverse()` 函数反转整数并输出结果。
阅读全文