Description
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(如:输入-380,输出-83)。
Input
输入共1行,一个整数N。
Output
输出共1行,一个整数,表示反转后的新数。
Sample Input
123
Sample Output
321
HINT
-1,000,000,000<=N<=1,000,000,000。
NOIP2011 普及组 reverse
Source
--------------------------------------------------------------------------------------------------------------------------------
小坑:
注意用while(cin>> )读入字符串,否则会PE。
思路:
首先利用reverse将字符串反转;如果原字符串的数字是负数,那么反转后的最后一位就是负号。此时去掉末尾负号并直接输出负号。
(特殊情况:
考虑到“10000”这种反转后字符串存在多个零的情况,要顺次删除;
如果仅仅输入的是0则不能删去。)
ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string x;
while(cin>>x)
{
reverse(x.begin(),x.end());//反转初始字符串
if(x[x.size()-1]=='-')//如果是负数需要将负号删除
{
x.erase(x.size()-1,1);
cout<<"-";
}
int i=0;
int lenx=x.size();
while(x[i]=='0'&&lenx>1)//如果末尾有多个0则依次删除,如果输入为0则不删除
x.erase(0,1);
cout<<x<<endl;
}
}