题目描述
给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 N N N。
输出格式
一个整数,表示反转后的新数。
样例输入 1
123
样例输出1
321
样例输入 2
-380
样例输出 2
-83
【数据范围】
$-1,000,000,000\leq N\leq 1,000,000,000 $。
思路分析-方法1:
使用数位分离算法将数字反转。
注意数字的符号,当是负数时,需要先处理负号‘-’,再数位分离反转。
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
//处理负数
if (n < 0) {
cout << '-';
n = 0 - n; //把n变成非负数
}
//数位分离法反转整数n
int r = 0;
while (n > 0) {
r = r * 10 + n % 10; //组成数字的过程中可自动去掉前面的0
n /= 10;
}
cout << r;
return 0;
}
思路分析-方法2:
将整数当作字符串处理。头文件algorithm中的reverse方法,可以完成字符串的反转。
注意:
1)当是负数时,需要先处理负号‘-’ ,再字符串反转。
2)当原来的数字末尾是0时,反转后需要去掉高位的0
3)当输入数据是0时,也要保留1位,所以去掉高位0时要保证剩余字符串长度至少为1。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string s;
cin >> s;
if (s[0] == '-') { //处理符号
cout << "-"; //输出负号
s = s.substr(1); //去掉负号
}
reverse(s.begin(), s.end()); //翻转
//找到第一个非0的位置,最少保留1位(当输入是0时,也要保留一位0)
int pos = 0;
while (s[pos] == '0' && pos < s.length() - 1) pos++;
//去掉高位0
s = s.substr(pos);
//输出结果
cout << s;
return 0;
}