[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';
}
返回题目