题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
输入格式
输入共1行,1个整数N。
输出格式
输出共1行,1个整数表示反转后的新数。
数据范围
|N|≤109
输入样例1:
123
输出样例1:
321
输入样例2:
-380
输出样例2:
-83
写法一 字符串
思路
1.反转字符串
2.需要特判一下‘-’
3.需要将‘0’删除
4.输出
c++代码
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
string a;
int k=0;
cin>>a;
reverse(a.begin(),a.end());//反转字符串
if(a.back()=='-')
{
a.pop_back();
cout<<'-';
}
while(k+1<a.size()&&a[k]=='0')//删除前导0
//+1是为了防止越界,如果输入的就是‘0’,输出也是‘0’,防止把这个‘0’也删掉
{
k++;
}
while(k<a.size())//输出因为字符串的第一个下标为0,所以要用‘<’
{
cout<<a[k++];
}
return 0;
}
写法二 整数
思路
再定义一个int型的num,将反转后的数字存储到这里面
具体做法:
1.将原数向10取余
2.将取余结果存入num
3.将num乘以10,以便让下一位存入(在循环中应该先进行这一步,防止最后一层循环再乘以10,最后输出多一个‘0’)
c++代码
#include<iostream>
using namespace std;
int main()
{
int n,num=0;
cin>>n;
while(n!=0)//注意这里必须是!=0,因为可能有负数的情况,除非负数情况单独处理
{
num*=10;
num+=n%10;
n/=10;
}
cout<<num;
return 0;
}