[NOIP 2011 普及组] 数字反转 · 教师题解
[NOIP 2011 普及组] 数字反转
知识点
整数运算、数位处理
解题思路
取绝对值后反复取末位并加入反转结果,最后恢复原数符号。前导零自然被整数运算去掉。
正确性说明
每轮将尚未处理的最低位追加到答案右侧,处理完后各位顺序恰好反转;符号独立保存,不参与数位操作。
易错点
输入为0时输出0;负号仍在最前面;用long long避免反转中间值或取绝对值越界。
复杂度
时间O(log(|n|+1)),空间O(1)。
参考代码(GNU C++17)
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n;cin>>n;bool neg=n<0;if(neg)n=-n;
long long ans=0;while(n){ans=ans*10+n%10;n/=10;}
cout<<(neg?-ans:ans)<<'\n';
}